Zelda Classic Coverage Report


Directory: src/
File: src/qst.cpp
Date: 2022-12-11 04:23:29
Exec Total Coverage
Lines: 6978 11480 60.8%
Functions: 66 105 62.9%
Branches: 4304 9897 43.5%

Line Branch Exec Source
1 //--------------------------------------------------------
2 // Zelda Classic
3 // by Jeremy Craner, 1999-2000
4 //
5 // qst.cc
6 //
7 // Code for loading '.qst' files in ZC and ZQuest.
8 //
9 //--------------------------------------------------------
10
11 #ifndef __GTHREAD_HIDE_WIN32API
12 #define __GTHREAD_HIDE_WIN32API 1
13 #endif //prevent indirectly including windows.h
14
15 #include "precompiled.h" //always first
16 12
17 #include <stdio.h>
18 #include <string.h>
19 #include <string>
20 #include <map>
21 #include <vector>
22 #include <assert.h>
23
24
25 #include "metadata/sigs/devsig.h.sig"
26 #include "metadata/sigs/compilersig.h.sig"
27 #include "metadata/versionsig.h"
28 #include "base/zc_alleg.h"
29 #include "base/zdefs.h"
30 #include "base/colors.h"
31 #include "tiles.h"
32 #include "base/zsys.h"
33 #include "qst.h"
34 //#include "zquest.h"
35 #include "defdata.h"
36 #include "subscr.h"
37 #include "font.h"
38 #include "zc_custom.h"
39 #include "sfx.h"
40 #include "md5.h"
41 #include "ffscript.h"
42 #include "particles.h"
43 #include "dialog/alert.h"
44 //FFScript FFCore;
45 extern FFScript FFCore;
46 extern ZModule zcm;
47 extern zcmodule moduledata;
48 extern uint8_t __isZQuest;
49 extern sprite_list guys, items, Ewpns, Lwpns, Sitems, chainlinks, decorations;
50 extern particle_list particles;
51 extern void setZScriptVersion(int32_t s_version);
52 //FFSCript FFEngine;
53
54 int32_t temp_ffscript_version = 0;
55 static bool read_ext_zinfo = false, read_zinfo = false;
56 static bool loadquest_report = false;
57 static char const* loading_qst_name = NULL;
58 static byte loading_qst_num = 0;
59
60 #ifdef _MSC_VER
61 #define strncasecmp _strnicmp
62 #endif
63
64 #ifndef _AL_MALLOC
65 #define _AL_MALLOC(a) _al_malloc(a)
66 #define _AL_FREE(a) _al_free(a)
67 #endif
68
69 using std::string;
70 using std::pair;
71
72 // extern bool debug;
73 extern int32_t hero_animation_speed; //lower is faster animation
74 extern std::vector<mapscr> TheMaps;
75 extern zcmap *ZCMaps;
76 extern MsgStr *MsgStrings;
77 extern DoorComboSet *DoorComboSets;
78 extern dmap *DMaps;
79 extern newcombo *combobuf;
80 extern byte *colordata;
81 //extern byte *tilebuf;
82 extern tiledata *newtilebuf;
83 extern byte *trashbuf;
84 extern itemdata *itemsbuf;
85 extern wpndata *wpnsbuf;
86 extern comboclass *combo_class_buf;
87 extern guydata *guysbuf;
88 extern ZCHEATS zcheats;
89 extern zinitdata zinit;
90 extern char palnames[MAXLEVELS][17];
91 extern int32_t memrequested;
92 extern char *byte_conversion(int32_t number, int32_t format);
93 extern char *byte_conversion2(int32_t number1, int32_t number2, int32_t format1, int32_t format2);
94 12 string zScript;
95 12 std::map<int32_t, script_slot_data > ffcmap;
96 12 std::map<int32_t, script_slot_data > globalmap;
97 12 std::map<int32_t, script_slot_data > genericmap;
98 12 std::map<int32_t, script_slot_data > itemmap;
99 12 std::map<int32_t, script_slot_data > npcmap;
100 12 std::map<int32_t, script_slot_data > ewpnmap;
101
0/2
✗ Branch 0 not taken.
✗ Branch 1 not taken.
24 std::map<int32_t, script_slot_data > lwpnmap;
102 12 std::map<int32_t, script_slot_data > playermap;
103 12 std::map<int32_t, script_slot_data > dmapmap;
104 12 std::map<int32_t, script_slot_data > screenmap;
105 12 std::map<int32_t, script_slot_data > itemspritemap;
106 12 std::map<int32_t, script_slot_data > comboscriptmap;
107 void free_newtilebuf();
108 bool combosread=false;
109 bool mapsread=false;
110 bool fixffcs=false;
111 bool fixpolsvoice=false;
112
113 12 const std::string script_slot_data::DEFAULT_FORMAT = "%s %s";
114 12 const std::string script_slot_data::INVALID_FORMAT = "%s --%s";
115 12 const std::string script_slot_data::DISASSEMBLED_FORMAT = "%s ++%s";
116 12 const std::string script_slot_data::ZASM_FORMAT = "%s ==%s";
117
118 char qstdat_string[2048] = { 0 };
119
120 static zinfo* load_tmp_zi = NULL;
121
122 int32_t memDBGwatch[8]= {0,0,0,0,0,0,0,0}; //So I can monitor memory crap
123 const byte clavio[9]={97,109,111,110,103,117,115,0};
124
125 //enum { qe_OK, qe_notfound, qe_invalid, qe_version, qe_obsolete,
126 // qe_missing, qe_internal, qe_pwd, qe_match, qe_minver };
127
128 extern combo_alias combo_aliases[MAXCOMBOALIASES];
129 extern combo_pool combo_pools[MAXCOMBOPOOLS];
130 const char *qst_error[] =
131 {
132 "OK","File not found","Invalid quest file",
133 "Version not supported","Obsolete version",
134 "Missing new data" , /* but let it pass in ZQuest */
135 "Internal error occurred", "Invalid password",
136 "Doesn't match saved game", "Save file is for older version of quest; please start new save",
137 "Out of memory", "File Debug Mode", "Canceled", "", "No quest assigned"
138 };
139
140 //for legacy quests -DD
141 enum { ssiBOMB, ssiSWORD, ssiSHIELD, ssiCANDLE, ssiLETTER, ssiPOTION, ssiLETTERPOTION, ssiBOW, ssiARROW, ssiBOWANDARROW, ssiBAIT, ssiRING, ssiBRACELET, ssiMAP,
142 ssiCOMPASS, ssiBOSSKEY, ssiMAGICKEY, ssiBRANG, ssiWAND, ssiRAFT, ssiLADDER, ssiWHISTLE, ssiBOOK, ssiWALLET, ssiSBOMB, ssiHCPIECE, ssiAMULET, ssiFLIPPERS,
143 ssiHOOKSHOT, ssiLENS, ssiHAMMER, ssiBOOTS, ssiDINSFIRE, ssiFARORESWIND, ssiNAYRUSLOVE, ssiQUIVER, ssiBOMBBAG, ssiCBYRNA, ssiROCS, ssiHOVERBOOTS,
144 ssiSPINSCROLL, ssiCROSSSCROLL, ssiQUAKESCROLL, ssiWHISPRING, ssiCHARGERING, ssiPERILSCROLL, ssiWEALTHMEDAL, ssiHEARTRING, ssiMAGICRING, ssiSPINSCROLL2,
145 ssiQUAKESCROLL2, ssiAGONY, ssiSTOMPBOOTS, ssiWHIMSICALRING, ssiPERILRING, ssiMAX
146 };
147
148 static byte deprecated_rules[QUESTRULES_NEW_SIZE];
149
150
151 void delete_combo_aliases()
152 {
153 for(int32_t j(0); j<256; j++)
154 {
155 if(combo_aliases[j].combos != NULL)
156 {
157 delete[] combo_aliases[j].combos;
158 combo_aliases[j].combos=NULL;
159 }
160
161 if(combo_aliases[j].csets != NULL)
162 {
163 delete[] combo_aliases[j].csets;
164 combo_aliases[j].csets=NULL;
165 }
166 }
167
168 }
169
170 char *byte_conversion(int32_t number, int32_t format)
171 {
172 static char num_str[40];
173
174 if(format==-1) //auto
175 {
176 format=1; //bytes
177
178 if(number>1024)
179 {
180 format=2; //kilobytes
181 }
182
183 if(number>1024*1024)
184 {
185 format=3; //megabytes
186 }
187
188 if(number>1024*1024*1024)
189 {
190 format=4; //gigabytes (dude, what are you doing?)
191 }
192 }
193
194 switch(format)
195 {
196 case 1: //bytes
197 sprintf(num_str,"%db",number);
198 break;
199
200 case 2: //kilobytes
201 sprintf(num_str,"%.2fk",float(number)/1024);
202 break;
203
204 case 3: //megabytes
205 sprintf(num_str,"%.2fM",float(number)/(1024*1024));
206 break;
207
208 case 4: //gigabytes
209 sprintf(num_str,"%.2fG",float(number)/(1024*1024*1024));
210 break;
211
212 default:
213 exit(1);
214 break;
215 }
216
217 return num_str;
218 }
219
220 168 char *byte_conversion2(int32_t number1, int32_t number2, int32_t format1, int32_t format2)
221 {
222 static char num_str1[40];
223 static char num_str2[40];
224 static char num_str[80];
225
226
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 168 times.
168 if(format1==-1) //auto
227 {
228 168 format1=1; //bytes
229
230
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 168 times.
168 if(number1>1024)
231 {
232 168 format1=2; //kilobytes
233 168 }
234
235
2/2
✓ Branch 0 taken 120 times.
✓ Branch 1 taken 48 times.
168 if(number1>1024*1024)
236 {
237 48 format1=3; //megabytes
238 48 }
239
240
1/2
✓ Branch 0 taken 168 times.
✗ Branch 1 not taken.
168 if(number1>1024*1024*1024)
241 {
242 format1=4; //gigabytes (dude, what are you doing?)
243 }
244 168 }
245
246
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 168 times.
168 if(format2==-1) //auto
247 {
248 168 format2=1; //bytes
249
250
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 168 times.
168 if(number2>1024)
251 {
252 168 format2=2; //kilobytes
253 168 }
254
255
2/2
✓ Branch 0 taken 12 times.
✓ Branch 1 taken 156 times.
168 if(number2>1024*1024)
256 {
257 156 format2=3; //megabytes
258 156 }
259
260
1/2
✓ Branch 0 taken 168 times.
✗ Branch 1 not taken.
168 if(number2>1024*1024*1024)
261 {
262 format2=4; //gigabytes (dude, what are you doing?)
263 }
264 168 }
265
266
2/5
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
✓ Branch 3 taken 48 times.
✗ Branch 4 not taken.
168 switch(format1)
267 {
268 case 1: //bytes
269 sprintf(num_str1,"%db",number1);
270 break;
271
272 case 2: //kilobytes
273 120 sprintf(num_str1,"%.2fk",float(number1)/1024);
274 120 break;
275
276 case 3: //megabytes
277 48 sprintf(num_str1,"%.2fM",float(number1)/(1024*1024));
278 48 break;
279
280 case 4: //gigabytes
281 sprintf(num_str1,"%.2fG",float(number1)/(1024*1024*1024));
282 break;
283
284 default:
285 exit(1);
286 break;
287 }
288
289
2/5
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 156 times.
✗ Branch 4 not taken.
168 switch(format2)
290 {
291 case 1: //bytes
292 sprintf(num_str2,"%db",number2);
293 break;
294
295 case 2: //kilobytes
296 12 sprintf(num_str2,"%.2fk",float(number2)/1024);
297 12 break;
298
299 case 3: //megabytes
300 156 sprintf(num_str2,"%.2fM",float(number2)/(1024*1024));
301 156 break;
302
303 case 4: //gigabytes
304 sprintf(num_str2,"%.2fG",float(number2)/(1024*1024*1024));
305 break;
306
307 default:
308 exit(1);
309 break;
310 }
311
312 168 sprintf(num_str, "%s/%s", num_str1, num_str2);
313 168 return num_str;
314 }
315
316 char *ordinal(int32_t num)
317 {
318 static const char *ending[4] = {"st","nd","rd","th"};
319 static char ord_str[8];
320
321 char *end;
322 int32_t t=(num%100)/10;
323 int32_t n=num%10;
324
325 if(n>=1 && n<4 && t!=1)
326 end = (char *)ending[n-1];
327 else
328 end = (char *)ending[3];
329
330 sprintf(ord_str,"%d%s",num%10000,end);
331 return ord_str;
332 }
333
334 12 int32_t get_version_and_build(PACKFILE *f, word *version, word *build)
335 {
336 int32_t ret;
337 12 *version=0;
338 12 *build=0;
339 12 byte temp_map_count=map_count;
340 byte temp_midi_flags[MIDIFLAGS_SIZE];
341 12 memcpy(temp_midi_flags, midi_flags, MIDIFLAGS_SIZE);
342
343 zquestheader tempheader;
344
345
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!f)
346 {
347 return qe_invalid;
348 }
349
350 12 ret=readheader(f, &tempheader, true);
351
352
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(ret)
353 {
354 return ret;
355 }
356
357 12 map_count=temp_map_count;
358 12 memcpy(midi_flags, temp_midi_flags, MIDIFLAGS_SIZE);
359 12 *version=tempheader.zelda_version;
360 12 *build=tempheader.build;
361 12 return 0;
362 12 }
363
364
365 12 bool find_section(PACKFILE *f, int32_t section_id_requested)
366 {
367
368
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!f)
369 {
370 return false;
371 }
372
373 int32_t section_id_read;
374 12 bool catchup=false;
375 word dummy;
376 byte tempbyte;
377 char tempbuf[65536];
378
379
380
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 switch(section_id_requested)
381 {
382 case ID_RULES:
383 case ID_STRINGS:
384 case ID_MISC:
385 case ID_TILES:
386 case ID_COMBOS:
387 case ID_CSETS:
388 case ID_MAPS:
389 case ID_DMAPS:
390 case ID_DOORS:
391 case ID_ITEMS:
392 case ID_WEAPONS:
393 case ID_COLORS:
394 case ID_ICONS:
395 case ID_INITDATA:
396 case ID_GUYS:
397 case ID_MIDIS:
398 case ID_CHEATS:
399 12 break;
400
401 default:
402 al_trace("Bad section requested!\n");
403 return false;
404 break;
405 }
406
407 dword section_size;
408
409 //section id
410
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_mgetl(&section_id_read,f,true))
411 {
412 return false;
413 }
414
415
1/2
✓ Branch 0 taken 2448 times.
✗ Branch 1 not taken.
2448 while(!pack_feof(f))
416 {
417
2/2
✓ Branch 0 taken 12 times.
✓ Branch 1 taken 2436 times.
2448 switch(section_id_read)
418 {
419 case ID_RULES:
420 case ID_STRINGS:
421 case ID_MISC:
422 case ID_TILES:
423 case ID_COMBOS:
424 case ID_CSETS:
425 case ID_MAPS:
426 case ID_DMAPS:
427 case ID_DOORS:
428 case ID_ITEMS:
429 case ID_WEAPONS:
430 case ID_COLORS:
431 case ID_ICONS:
432 case ID_INITDATA:
433 case ID_GUYS:
434 case ID_MIDIS:
435 case ID_CHEATS:
436 12 catchup=false;
437 12 break;
438
439 default:
440 2436 break;
441 }
442
443
444
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2448 times.
2448 while(catchup)
445 {
446 //section id
447 section_id_read=(section_id_read<<8);
448
449 if(!p_getc(&tempbyte,f,true))
450 {
451 return false;
452 }
453
454 section_id_read+=tempbyte;
455 }
456
457
1/2
✓ Branch 0 taken 2448 times.
✗ Branch 1 not taken.
2448 if(section_id_read==section_id_requested)
458 {
459 return true;
460 }
461 else
462 {
463 //section version info
464
1/2
✓ Branch 0 taken 2448 times.
✗ Branch 1 not taken.
2448 if(!p_igetw(&dummy,f,true))
465 {
466 return false;
467 }
468
469
1/2
✓ Branch 0 taken 2448 times.
✗ Branch 1 not taken.
2448 if(!p_igetw(&dummy,f,true))
470 {
471 return false;
472 }
473
474 //section size
475
1/2
✓ Branch 0 taken 2448 times.
✗ Branch 1 not taken.
2448 if(!p_igetl(&section_size,f,true))
476 {
477 return false;
478 }
479
480 //pack_fseek(f, section_size);
481
2/2
✓ Branch 0 taken 786420 times.
✓ Branch 1 taken 2448 times.
788868 while(section_size>65535)
482 {
483 786420 pfread(tempbuf,65535,f,true);
484 786420 tempbuf[65535]=0;
485 786420 section_size-=65535;
486 }
487
488
2/2
✓ Branch 0 taken 2388 times.
✓ Branch 1 taken 60 times.
2448 if(section_size>0)
489 {
490 60 pfread(tempbuf,section_size,f,true);
491 60 tempbuf[section_size]=0;
492 60 }
493 }
494
495 //section id
496
2/2
✓ Branch 0 taken 12 times.
✓ Branch 1 taken 2436 times.
2448 if(!p_mgetl(&section_id_read,f,true))
497 {
498 12 return false;
499 }
500 }
501
502 return false;
503 12 }
504
505
506
507
508
509 12 bool valid_zqt(PACKFILE *f)
510 {
511
512 //word tiles_used;
513 //word combos_used;
514 //open the file
515 //PACKFILE *f = pack_fopen(path, F_READ_PACKED);
516
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if(!f)
517 return false;
518
519 //for now, everything else is valid
520 12 return true;
521
522 /*int16_t version;
523 byte build;
524
525 //read the version and make sure it worked
526 if(!p_igetw(&version,f,true))
527 {
528 goto error;
529 }
530
531 //read the build and make sure it worked
532 if(!p_getc(&build,f,true))
533 goto error;
534
535 //read the tile info and make sure it worked
536 if(!p_igetw(&tiles_used,f,true))
537 {
538 goto error;
539 }
540
541 for (int32_t i=0; i<tiles_used; i++)
542 {
543 if(!pfread(trashbuf,tilesize(tf4Bit),f,true))
544 {
545 goto error;
546 }
547 }
548
549 //read the combo info and make sure it worked
550 if(!p_igetw(&combos_used,f,true))
551 {
552 goto error;
553 }
554 for (int32_t i=0; i<combos_used; i++)
555 {
556 if(!pfread(trashbuf,sizeof(newcombo),f,true))
557 {
558 goto error;
559 }
560 }
561
562 //read the palette info and make sure it worked
563 for (int32_t i=0; i<48; i++)
564 {
565 if(!pfread(trashbuf,newpdTOTAL,f,true))
566 {
567 goto error;
568 }
569 }
570 if(!pfread(trashbuf,sizeof(palcycle)*256*3,f,true))
571 {
572 goto error;
573 }
574 for (int32_t i=0; i<MAXLEVELS; i++)
575 {
576 if(!pfread(trashbuf,PALNAMESIZE,f,true))
577 {
578 goto error;
579 }
580 }
581
582 //read the sprite info and make sure it worked
583 for (int32_t i=0; i<MAXITEMS; i++)
584 {
585 if(!pfread(trashbuf,sizeof(itemdata),f,true))
586 {
587 goto error;
588 }
589 }
590
591 for (int32_t i=0; i<MAXWPNS; i++)
592 {
593 if(!pfread(trashbuf,sizeof(wpndata),f,true))
594 {
595 goto error;
596 }
597 }
598
599 //read the triforce pieces info and make sure it worked
600 for (int32_t i=0; i<8; ++i)
601 {
602 if(!p_getc(&trashbuf,f,true))
603 {
604 goto error;
605 }
606 }
607
608
609
610 //read the game icons info and make sure it worked
611 for (int32_t i=0; i<4; ++i)
612 {
613 if(!p_igetw(&trashbuf,f,true))
614 {
615 goto error;
616 }
617 }
618
619 //read the misc colors info and map styles info and make sure it worked
620 if(!pfread(trashbuf,sizeof(zcolors),f,true))
621 {
622 goto error;
623 }
624
625 //read the template screens and make sure it worked
626 byte num_maps;
627 if(!p_getc(&num_maps,f,true))
628 {
629 goto error;
630 }
631 for (int32_t i=0; i<TEMPLATES; i++)
632 {
633 if(!pfread(trashbuf,sizeof(mapscr),f,true))
634 {
635 goto error;
636 }
637 }
638 if (num_maps>1) //dungeon templates
639 {
640 for (int32_t i=0; i<TEMPLATES; i++)
641 {
642 if(!pfread(trashbuf,sizeof(mapscr),f,true))
643 {
644 goto error;
645 }
646 }
647 }
648
649 //yay! it worked! close the file and say everything was ok.
650 pack_fclose(f);
651 return true;
652
653 error:
654 pack_fclose(f);
655 return false;*/
656 12 }
657
658 bool valid_zqt(const char *filename)
659 {
660 PACKFILE *f=NULL;
661 bool isvalid;
662 char deletefilename[1024];
663 deletefilename[0]=0;
664 int32_t error;
665 f=open_quest_file(&error, filename, deletefilename, true, true,false);
666
667 if(!f)
668 {
669 // setPackfilePassword(NULL);
670 return false;
671 }
672
673 isvalid=valid_zqt(f);
674
675 if(deletefilename[0])
676 {
677 delete_file(deletefilename);
678 }
679
680 // setPackfilePassword(NULL);
681 return isvalid;
682 }
683
684 75 PACKFILE *open_quest_file(int32_t *open_error, const char *filename, char *deletefilename, bool compressed,bool encrypted, bool show_progress)
685 {
686 char tmpfilename[L_tmpnam];
687 75 temp_name(tmpfilename);
688 char percent_done[30];
689 75 int32_t current_method=0;
690
691 PACKFILE *f;
692 75 const char *passwd= encrypted ? datapwd : "";
693
694 // oldquest flag is set when an unencrypted qst file is suspected.
695 75 bool oldquest = false;
696 int32_t ret;
697
698
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(show_progress)
699 {
700 box_start(1, "Loading Quest", lfont, font, true);
701 }
702
703 75 box_out("Loading Quest: ");
704 //if(strncasecmp(filename, "qst.dat", 7)!=0)
705 //int32_t qstdat_str_size = 0;
706 //for ( int32_t q = 0; q < 255; q++ ) //find the length of the string
707 //{
708 // if ( moduledata.datafiles[qst_dat][q] != 0 ) qstdat_str_size++;
709 // else break;
710 //}
711 //if(strncasecmp(filename, moduledata.datafiles[qst_dat], 7)!=0)
712 75 al_trace("Trying to do strncasecmp() when loading a quest\n");
713 75 int32_t qstdat_filename_size = strlen(moduledata.datafiles[qst_dat]);
714 75 al_trace("Filename size of qst.dat file %s is %d.\n", moduledata.datafiles[qst_dat], qstdat_filename_size);
715 //if(strncasecmp(filename, moduledata.datafiles[qst_dat], qstdat_filename_size)!=0)
716
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(strcmp(filename, moduledata.datafiles[qst_dat])!=0)
717 {
718 75 box_out(filename);
719 75 }
720 else
721 {
722 box_out("new quest"); // Or whatever
723 }
724 75 box_out("...");
725 75 box_eol();
726 75 box_eol();
727
728
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(encrypted)
729 {
730 75 box_out("Decrypting...");
731 75 box_save_x();
732 75 ret = decode_file_007(filename, tmpfilename, ENC_STR, ENC_METHOD_MAX-1, strstr(filename, ".dat#")!=NULL, passwd);
733
734
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(ret)
735 {
736 switch(ret)
737 {
738 case 1:
739 box_out("error.");
740 box_eol();
741 box_end(true);
742 *open_error=qe_notfound;
743 return NULL;
744
745 case 2:
746 box_out("error.");
747 box_eol();
748 box_end(true);
749 *open_error=qe_internal;
750 return NULL;
751 // be sure not to delete tmpfilename now...
752 }
753
754 if(ret==5) //old encryption?
755 {
756 current_method++;
757 sprintf(percent_done, "%d%%", (current_method*100)/ENC_METHOD_MAX);
758 box_out(percent_done);
759 box_load_x();
760 ret = decode_file_007(filename, tmpfilename, ENC_STR, ENC_METHOD_211B9, strstr(filename, ".dat#")!=NULL, passwd);
761 }
762
763 if(ret==5) //old encryption?
764 {
765 current_method++;
766 sprintf(percent_done, "%d%%", (current_method*100)/ENC_METHOD_MAX);
767 box_out(percent_done);
768 box_load_x();
769 ret = decode_file_007(filename, tmpfilename, ENC_STR, ENC_METHOD_192B185, strstr(filename, ".dat#")!=NULL, passwd);
770 }
771
772 if(ret==5) //old encryption?
773 {
774 current_method++;
775 sprintf(percent_done, "%d%%", (current_method*100)/ENC_METHOD_MAX);
776 box_out(percent_done);
777 box_load_x();
778 ret = decode_file_007(filename, tmpfilename, ENC_STR, ENC_METHOD_192B105, strstr(filename, ".dat#")!=NULL, passwd);
779 }
780
781 if(ret==5) //old encryption?
782 {
783 current_method++;
784 sprintf(percent_done, "%d%%", (current_method*100)/ENC_METHOD_MAX);
785 box_out(percent_done);
786 box_load_x();
787 ret = decode_file_007(filename, tmpfilename, ENC_STR, ENC_METHOD_192B104, strstr(filename, ".dat#")!=NULL, passwd);
788 }
789
790 if(ret)
791 {
792 oldquest = true;
793 passwd="";
794 }
795 }
796
797 75 box_out("okay.");
798 75 box_eol();
799 75 }
800 else
801 {
802 oldquest = true;
803 }
804
805 75 box_out("Opening...");
806
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 f = pack_fopen_password(oldquest ? filename : tmpfilename, compressed ? F_READ_PACKED : F_READ, passwd);
807
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!f)
808 {
809 if((compressed==1)&&(errno==EDOM))
810 {
811 f = pack_fopen_password(oldquest ? filename : tmpfilename, F_READ, passwd);
812 }
813
814 if(!f)
815 {
816 if(!oldquest)
817 {
818 delete_file(tmpfilename);
819 }
820 box_out("error.");
821 box_eol();
822 box_end(true);
823 *open_error=qe_invalid;
824 return NULL;
825 }
826 }
827
828
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if(!oldquest)
829 {
830
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if(deletefilename)
831 75 sprintf(deletefilename, "%s", tmpfilename);
832 75 }
833
834 75 box_out("okay.");
835 75 box_eol();
836
837 75 return f;
838 75 }
839
840 12 PACKFILE *open_quest_template(zquestheader *Header, char *deletefilename, bool validate)
841 {
842 char *filename;
843 12 PACKFILE *f=NULL;
844 12 int32_t open_error=0;
845 12 deletefilename[0]=0;
846
847 12 strcpy(qstdat_string,moduledata.datafiles[qst_dat]);
848 12 strcat(qstdat_string,"#NESQST_NEW_QST");
849
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if(Header->templatepath[0]==0)
850 {
851 12 filename=(char *)malloc(2048);
852 //strcpy(filename, "qst.dat#NESQST_NEW_QST");
853 12 strcpy(filename, qstdat_string);
854 12 }
855 else
856 {
857 filename=Header->templatepath;
858 }
859
860 12 f=open_quest_file(&open_error, filename, deletefilename, true, true,false);
861
862
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if(Header->templatepath[0]==0)
863 {
864 12 free(filename);
865 12 }
866
867
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!f)
868 {
869 return NULL;
870 }
871
872
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if(validate)
873 {
874
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!valid_zqt(f))
875 {
876 jwin_alert("Error","Invalid Quest Template",NULL,NULL,"O&K",NULL,'k',0,lfont);
877 pack_fclose(f);
878
879 //setPackfilePassword(NULL);
880 if(deletefilename[0])
881 {
882 delete_file(deletefilename);
883 }
884
885 return NULL;
886 }
887 12 }
888
889 12 return f;
890 12 }
891
892 12 bool init_section(zquestheader *Header, int32_t section_id, miscQdata *Misc, zctune *tunes, bool validate)
893 {
894 12 combosread=false;
895 12 mapsread=false;
896 12 fixffcs=false;
897
898
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 switch(section_id)
899 {
900 case ID_RULES:
901 case ID_STRINGS:
902 case ID_MISC:
903 case ID_TILES:
904 case ID_COMBOS:
905 case ID_CSETS:
906 case ID_MAPS:
907 case ID_DMAPS:
908 case ID_DOORS:
909 case ID_ITEMS:
910 case ID_WEAPONS:
911 case ID_COLORS:
912 case ID_ICONS:
913 case ID_INITDATA:
914 case ID_GUYS:
915 case ID_MIDIS:
916 case ID_CHEATS:
917 case ID_ITEMDROPSETS:
918 case ID_FAVORITES:
919 12 break;
920
921 default:
922 return false;
923 break;
924 }
925
926 int32_t ret;
927 word version, build;
928 12 PACKFILE *f=NULL;
929
930 char deletefilename[1024];
931 12 deletefilename[0]=0;
932
933 //why is this here?
934 /*
935 if(colordata==NULL)
936 return false;
937 */
938
939 //setPackfilePassword(datapwd);
940 12 f=open_quest_template(Header, deletefilename, validate);
941
942
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if(!f) //no file, nothing to delete
943 {
944 // setPackfilePassword(NULL);
945 return false;
946 }
947
948 12 ret=get_version_and_build(f, &version, &build);
949
950
2/4
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 12 times.
12 if(ret||(version==0))
951 {
952 pack_fclose(f);
953
954 if(deletefilename[0])
955 {
956 delete_file(deletefilename);
957 }
958
959 // setPackfilePassword(NULL);
960 return false;
961 }
962
963
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if(!find_section(f, section_id))
964 {
965 12 al_trace("Can't find section!\n");
966 12 pack_fclose(f);
967
968
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if(deletefilename[0])
969 {
970 12 delete_file(deletefilename);
971 12 }
972
973 //setPackfilePassword(NULL);
974 12 return false;
975 }
976
977 switch(section_id)
978 {
979 case ID_RULES:
980 //rules
981 ret=readrules(f, Header, true);
982 break;
983
984 case ID_STRINGS:
985 //strings
986 ret=readstrings(f, Header, true);
987 break;
988
989 case ID_MISC:
990 //misc data
991 ret=readmisc(f, Header, Misc, true);
992 break;
993
994 case ID_TILES:
995 //tiles
996 ret=readtiles(f, newtilebuf, Header, version, build, 0, NEWMAXTILES, true, true);
997 break;
998
999 case ID_COMBOS:
1000 //combos
1001 clear_combos();
1002 ret=readcombos(f, Header, version, build, 0, MAXCOMBOS, true);
1003 combosread=true;
1004 break;
1005
1006 case ID_COMBOALIASES:
1007 //combos
1008 ret=readcomboaliases(f, Header, version, build, true);
1009 break;
1010
1011 case ID_CSETS:
1012 //color data
1013 ret=readcolordata(f, Misc, version, build, 0, newerpdTOTAL, true);
1014 break;
1015
1016 case ID_MAPS:
1017 //maps
1018 ret=readmaps(f, Header, true);
1019 mapsread=true;
1020 break;
1021
1022 case ID_DMAPS:
1023 //dmaps
1024 ret=readdmaps(f, Header, version, build, 0, MAXDMAPS, true);
1025 break;
1026
1027 case ID_DOORS:
1028 //door combo sets
1029 ret=readdoorcombosets(f, Header, true);
1030 break;
1031
1032 case ID_ITEMS:
1033 //items
1034 ret=readitems(f, version, build, true);
1035 break;
1036
1037 case ID_WEAPONS:
1038 //weapons
1039 ret=readweapons(f, Header, true);
1040 break;
1041
1042 case ID_COLORS:
1043 //misc. colors
1044 ret=readmisccolors(f, Header, Misc, true);
1045 break;
1046
1047 case ID_ICONS:
1048 //game icons
1049 ret=readgameicons(f, Header, Misc, true);
1050 break;
1051
1052 case ID_INITDATA:
1053 //initialization data
1054 ret=readinitdata(f, Header, true);
1055 break;
1056
1057 case ID_GUYS:
1058 //guys
1059 ret=readguys(f, Header, true);
1060 break;
1061
1062 case ID_MIDIS:
1063 //midis
1064 ret=readtunes(f, Header, tunes, true);
1065 break;
1066
1067 case ID_CHEATS:
1068 //cheat codes
1069 ret=readcheatcodes(f, Header, true);
1070 break;
1071
1072 case ID_ITEMDROPSETS:
1073 //item drop sets
1074 // Why is this one commented out?
1075 //ret=readitemdropsets(f, (int32_t)version, (word)build, true);
1076 break;
1077
1078 case ID_FAVORITES:
1079 // favorite combos and aliases
1080 ret=readfavorites(f, version, build, true);
1081 break;
1082
1083 default:
1084 ret=-1;
1085 break;
1086 }
1087
1088 pack_fclose(f);
1089
1090 if(deletefilename[0])
1091 {
1092 delete_file(deletefilename);
1093 }
1094
1095 //setPackfilePassword(NULL);
1096 if(!ret)
1097 {
1098 return true;
1099 }
1100
1101 return false;
1102 12 }
1103
1104 bool init_tiles(bool validate, zquestheader *Header)
1105 {
1106 return init_section(Header, ID_TILES, NULL, NULL, validate);
1107 }
1108
1109 bool init_combos(bool validate, zquestheader *Header)
1110 {
1111 return init_section(Header, ID_COMBOS, NULL, NULL, validate);
1112 }
1113
1114 bool init_colordata(bool validate, zquestheader *Header, miscQdata *Misc)
1115 {
1116 return init_section(Header, ID_CSETS, Misc, NULL, validate);
1117 }
1118
1119 63 void init_spritelists()
1120 {
1121
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(FFCore.quest_format[vZelda] < 0x255)
1122 {
1123 59 guys.setMax(255);
1124 59 items.setMax(255);
1125 59 Ewpns.setMax(255);
1126 59 Lwpns.setMax(255);
1127 59 Sitems.setMax(255);
1128 59 chainlinks.setMax(255);
1129 59 decorations.setMax(255);
1130 59 particles.setMax(255);
1131 59 }
1132 else
1133 {
1134 4 guys.setMax(255);
1135 4 items.setMax(255);
1136 4 Ewpns.setMax(255);
1137 4 Lwpns.setMax(255);
1138 4 Sitems.setMax(255);
1139 4 chainlinks.setMax(255);
1140 4 decorations.setMax(255);
1141 4 particles.setMax(255*((255*4)+1)); //255 per sprite that can use particles; guys, items, ewpns, lwpns, +HERO
1142 }
1143 63 }
1144
1145 12 bool reset_items(bool validate, zquestheader *Header)
1146 {
1147 12 bool ret = init_section(Header, ID_ITEMS, NULL, NULL, validate);
1148
1149 //Ignore this, but don't remove it
1150 /*
1151 if (ret)
1152 for(int32_t i=0; i<MAXITEMS; i++)
1153 {
1154 reset_itembuf(&itemsbuf[i], i);
1155 }
1156 */
1157
2/2
✓ Branch 0 taken 3072 times.
✓ Branch 1 taken 12 times.
3084 for(int32_t i=0; i<MAXITEMS; i++) reset_itemname(i);
1158
1159 12 return ret;
1160 }
1161
1162 bool reset_guys()
1163 {
1164 // The .dat file's guys definitions are always synchronised with defdata.cpp's - even the tile settings.
1165 init_guys(V_GUYS);
1166 return true;
1167 }
1168
1169 bool reset_wpns(bool validate, zquestheader *Header)
1170 {
1171 bool ret = init_section(Header, ID_WEAPONS, NULL, NULL, validate);
1172
1173 for(int32_t i=0; i<WPNCNT; i++)
1174 reset_weaponname(i);
1175
1176 return ret;
1177 }
1178
1179 bool reset_mapstyles(bool validate, miscQdata *Misc)
1180 {
1181 Misc->colors.blueframe_tile = 20044;
1182 Misc->colors.blueframe_cset = 0;
1183 Misc->colors.triforce_tile = 23461;
1184 Misc->colors.triforce_cset = 1;
1185 Misc->colors.triframe_tile = 18752;
1186 Misc->colors.triframe_cset = 1;
1187 Misc->colors.overworld_map_tile = 16990;
1188 Misc->colors.overworld_map_cset = 2;
1189 Misc->colors.HCpieces_tile = 21160;
1190 Misc->colors.HCpieces_cset = 8;
1191 Misc->colors.dungeon_map_tile = 19651;
1192 Misc->colors.dungeon_map_cset = 8;
1193 return true;
1194 }
1195
1196 bool reset_doorcombosets(bool validate, zquestheader *Header)
1197 {
1198 return init_section(Header, ID_DOORS, NULL, NULL, validate);
1199 }
1200
1201 12 int32_t get_qst_buffers()
1202 {
1203 12 memrequested+=(sizeof(mapscr)*MAPSCRS);
1204 12 Z_message("Allocating map buffer (%s)... ", byte_conversion2(sizeof(mapscr)*MAPSCRS,memrequested,-1, -1));
1205 12 TheMaps.resize(MAPSCRS);
1206
1207
2/2
✓ Branch 0 taken 1632 times.
✓ Branch 1 taken 12 times.
1644 for(int32_t i(0); i<MAPSCRS; i++)
1208 1632 TheMaps[i].zero_memory();
1209
1210 //memset(TheMaps, 0, sizeof(mapscr)*MAPSCRS); //shouldn't need this anymore
1211 12 Z_message("OK\n"); // Allocating map buffer...
1212
1213 12 memrequested+=(sizeof(zcmap)*MAXMAPS2);
1214 12 Z_message("Allocating combo buffer (%s)... ", byte_conversion2(sizeof(zcmap)*MAXMAPS2,memrequested,-1,-1));
1215
1216
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if((ZCMaps=(zcmap*)malloc(sizeof(zcmap)*MAXMAPS2))==NULL)
1217 return 0;
1218
1219 12 Z_message("OK\n");
1220
1221 // Allocating space for all 65535 strings uses up 10.62MB...
1222 // The vast majority of finished quests (and I presume this will be consistent for all time) use < 1000 strings in total.
1223 // (Shoelace's "Hero of Dreams" uses 1415.)
1224 // So let's be a bit generous and allow 4096 initially.
1225 // In the rare event that a quest overshoots this mark, we'll reallocate to the full 65535 later.
1226 // I tested it and it worked without flaw on 6/6/11. - L.
1227 // 2022: bumped from 4096 to 8192 to avoid a bug where the Strings menu shows (None) strings when the list passes
1228 // this threshold. Possibly some bug related to `msglistcache` to being reset?
1229 // See https://discord.com/channels/876899628556091432/992984989073416242
1230 12 msg_strings_size = 8192;
1231 12 memrequested+=(sizeof(MsgStr)*msg_strings_size);
1232 12 Z_message("Allocating string buffer (%s)... ", byte_conversion2(sizeof(MsgStr)*msg_strings_size,memrequested,-1,-1));
1233
1234
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 MsgStrings = new MsgStr[msg_strings_size];
1235
1236 //memset(MsgStrings, 0, sizeof(MsgStr)*msg_strings_size);
1237
2/2
✓ Branch 0 taken 98304 times.
✓ Branch 1 taken 12 times.
98316 for(auto q = 0; q < msg_strings_size; ++q)
1238 {
1239 98304 MsgStrings[q].clear();
1240 98304 }
1241 12 Z_message("OK\n"); // Allocating string buffer...
1242
1243 12 memrequested+=(sizeof(DoorComboSet)*MAXDOORCOMBOSETS);
1244 12 Z_message("Allocating door combo buffer (%s)... ", byte_conversion2(sizeof(DoorComboSet)*MAXDOORCOMBOSETS,memrequested,-1,-1));
1245
1246
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if((DoorComboSets=(DoorComboSet*)malloc(sizeof(DoorComboSet)*MAXDOORCOMBOSETS))==NULL)
1247 return 0;
1248
1249 12 Z_message("OK\n"); // Allocating door combo buffer...
1250
1251 12 memrequested+=(sizeof(dmap)*MAXDMAPS);
1252 12 Z_message("Allocating dmap buffer (%s)... ", byte_conversion2(sizeof(dmap)*MAXDMAPS,memrequested,-1,-1));
1253
1254
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if((DMaps=(dmap*)malloc(sizeof(dmap)*MAXDMAPS))==NULL)
1255 return 0;
1256
1257 12 memset(DMaps, 0, sizeof(dmap)*MAXDMAPS);
1258 12 Z_message("OK\n"); // Allocating dmap buffer...
1259
1260 12 memrequested+=(sizeof(newcombo)*MAXCOMBOS);
1261 12 Z_message("Allocating combo buffer (%s)... ", byte_conversion2(sizeof(newcombo)*MAXCOMBOS,memrequested,-1,-1));
1262
1263
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if((combobuf=(newcombo*)malloc(sizeof(newcombo)*MAXCOMBOS))==NULL)
1264 return 0;
1265
1266 12 memset(combobuf, 0, sizeof(newcombo)*MAXCOMBOS);
1267 12 Z_message("OK\n"); // Allocating combo buffer...
1268
1269 12 memrequested+=(psTOTAL255);
1270 12 Z_message("Allocating color data buffer (%s)... ", byte_conversion2(psTOTAL255,memrequested,-1,-1));
1271
1272
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if((colordata=(byte*)malloc(psTOTAL255))==NULL)
1273 return 0;
1274
1275 12 Z_message("OK\n"); // Allocating color data buffer...
1276
1277 12 memrequested+=(NEWMAXTILES*(sizeof(tiledata)+tilesize(tf4Bit)));
1278 12 Z_message("Allocating tile buffer (%s)... ", byte_conversion2(NEWMAXTILES*(sizeof(tiledata)+tilesize(tf4Bit)),memrequested,-1,-1));
1279
1280 12 free_newtilebuf();
1281
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if((newtilebuf=(tiledata*)malloc(NEWMAXTILES*sizeof(tiledata)))==NULL)
1282 return 0;
1283
1284 12 memset(newtilebuf, 0, NEWMAXTILES*sizeof(tiledata));
1285 //Z_message("Performed memset on tiles\n");
1286 12 clear_tiles(newtilebuf);
1287 //Z_message("Performed clear_tiles()\n");
1288 12 Z_message("OK\n"); // Allocating tile buffer...
1289
1290
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(is_zquest())
1291 {
1292 memrequested+=(NEWMAXTILES*(sizeof(tiledata)+tilesize(tf4Bit)));
1293 Z_message("Allocating tile grab buffer (%s)... ", byte_conversion2(NEWMAXTILES*sizeof(tiledata),memrequested,-1,-1));
1294
1295 if((grabtilebuf=(tiledata*)malloc(NEWMAXTILES*sizeof(tiledata)))==NULL)
1296 return 0;
1297
1298 memset(grabtilebuf, 0, NEWMAXTILES*sizeof(tiledata));
1299 clear_tiles(grabtilebuf);
1300 Z_message("OK\n"); // Allocating tile grab buffer...
1301 }
1302
1303 12 memrequested+=(100000);
1304 12 Z_message("Allocating trash buffer (%s)... ", byte_conversion2(100000,memrequested,-1,-1));
1305
1306
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if((trashbuf=(byte*)malloc(100000))==NULL)
1307 return 0;
1308
1309 12 Z_message("OK\n"); // Allocating trash buffer...
1310
1311 // Big, ugly band-aid here. Perhaps the most common cause of random crashes
1312 // has been inadvertently accessing itemsbuf[-1]. All such crashes should be
1313 // fixed by ensuring there's actually itemdata there.
1314 // If you change this, be sure to update del_qst_buffers, too.
1315
1316 12 memrequested+=(sizeof(itemdata)*(MAXITEMS+1));
1317 12 Z_message("Allocating item buffer (%s)... ", byte_conversion2(sizeof(itemdata)*(MAXITEMS+1),memrequested,-1,-1));
1318
1319
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if((itemsbuf=(itemdata*)malloc(sizeof(itemdata)*(MAXITEMS+1)))==NULL)
1320 return 0;
1321
1322 12 memset(itemsbuf,0,sizeof(itemdata)*(MAXITEMS+1));
1323 12 itemsbuf++;
1324 12 Z_message("OK\n"); // Allocating item buffer...
1325
1326 12 memrequested+=(sizeof(wpndata)*MAXWPNS);
1327 12 Z_message("Allocating weapon buffer (%s)... ", byte_conversion2(sizeof(wpndata)*MAXWPNS,memrequested,-1,-1));
1328
1329
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if((wpnsbuf=(wpndata*)malloc(sizeof(wpndata)*MAXWPNS))==NULL)
1330 return 0;
1331
1332 12 memset(wpnsbuf,0,sizeof(wpndata)*MAXWPNS);
1333 12 Z_message("OK\n"); // Allocating weapon buffer...
1334
1335 12 memrequested+=(sizeof(guydata)*MAXGUYS);
1336 12 Z_message("Allocating guy buffer (%s)... ", byte_conversion2(sizeof(guydata)*MAXGUYS,memrequested,-1,-1));
1337
1338
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if((guysbuf=(guydata*)malloc(sizeof(guydata)*MAXGUYS))==NULL)
1339 return 0;
1340
1341 12 memset(guysbuf,0,sizeof(guydata)*MAXGUYS);
1342 12 Z_message("OK\n"); // Allocating guy buffer...
1343
1344 12 memrequested+=(sizeof(comboclass)*cMAX);
1345 12 Z_message("Allocating combo class buffer (%s)... ", byte_conversion2(sizeof(comboclass)*cMAX,memrequested,-1,-1));
1346
1347
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if((combo_class_buf=(comboclass*)malloc(sizeof(comboclass)*cMAX))==NULL)
1348 return 0;
1349
1350 12 Z_message("OK\n"); // Allocating combo class buffer...
1351
1352 12 return 1;
1353 12 }
1354
1355
1356 12 void free_newtilebuf()
1357 {
1358
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if(newtilebuf)
1359 {
1360 for(int32_t i=0; i<NEWMAXTILES; i++)
1361 if(newtilebuf[i].data)
1362 free(newtilebuf[i].data);
1363
1364 free(newtilebuf);
1365 newtilebuf = 0;
1366 }
1367 12 }
1368
1369 void free_grabtilebuf()
1370 {
1371 if(is_zquest())
1372 {
1373 if(grabtilebuf)
1374 {
1375 for(int32_t i=0; i<NEWMAXTILES; i++)
1376 if(grabtilebuf[i].data) free(grabtilebuf[i].data);
1377
1378 free(grabtilebuf);
1379 grabtilebuf = 0;
1380 }
1381 }
1382 }
1383
1384 void del_qst_buffers()
1385 {
1386 al_trace("Cleaning maps. \n");
1387
1388 if(ZCMaps) free(ZCMaps);
1389
1390 if(MsgStrings) delete[] MsgStrings;
1391
1392 if(DoorComboSets) free(DoorComboSets);
1393
1394 if(DMaps) free(DMaps);
1395
1396 if(combobuf) free(combobuf);
1397
1398 if(colordata) free(colordata);
1399
1400 al_trace("Cleaning tile buffers. \n");
1401 free_newtilebuf();
1402 free_grabtilebuf();
1403
1404 al_trace("Cleaning misc. \n");
1405
1406 if(trashbuf) free(trashbuf);
1407
1408 // See get_qst_buffers
1409 if(itemsbuf)
1410 {
1411 itemsbuf--;
1412 free(itemsbuf);
1413 }
1414
1415 if(wpnsbuf) free(wpnsbuf);
1416
1417 if(guysbuf) free(guysbuf);
1418
1419 if(combo_class_buf) free(combo_class_buf);
1420 }
1421
1422 bool init_palnames()
1423 {
1424 // if(palnames==NULL)
1425 // return false;
1426
1427 for(int32_t x=0; x<MAXLEVELS; x++)
1428 {
1429 switch(x)
1430 {
1431 case 0:
1432 sprintf(palnames[x],"Overworld");
1433 break;
1434
1435 case 10:
1436 sprintf(palnames[x],"Caves");
1437 break;
1438
1439 case 11:
1440 sprintf(palnames[x],"Passageways");
1441 break;
1442
1443 default:
1444 sprintf(palnames[x],"%c",0);
1445 break;
1446 }
1447 }
1448
1449 return true;
1450 }
1451
1452 14371 static void *read_block(PACKFILE *f, int32_t size, int32_t alloc_size, bool keepdata)
1453 {
1454 void *p;
1455
1456
1/2
✓ Branch 0 taken 14371 times.
✗ Branch 1 not taken.
14371 p = _AL_MALLOC(MAX(size, alloc_size));
1457
1458
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 14371 times.
14371 if(!p)
1459 {
1460 return NULL;
1461 }
1462
1463
1/2
✓ Branch 0 taken 14371 times.
✗ Branch 1 not taken.
14371 if(!pfread(p,size,f,keepdata))
1464 {
1465 _AL_FREE(p);
1466 return NULL;
1467 }
1468
1469
1/2
✓ Branch 0 taken 14371 times.
✗ Branch 1 not taken.
14371 if(pack_ferror(f))
1470 {
1471 _AL_FREE(p);
1472 return NULL;
1473 }
1474
1475 14371 return p;
1476 14371 }
1477
1478 /* read_midi:
1479 * Reads MIDI data from a datafile (this is not the same thing as the
1480 * standard midi file format).
1481 */
1482
1483 1195 static MIDI *read_midi(PACKFILE *f, bool)
1484 {
1485 MIDI *m;
1486 int32_t c;
1487 1195 int16_t divisions=0;
1488 1195 int32_t len=0;
1489
1490 1195 m = (MIDI*)_AL_MALLOC(sizeof(MIDI));
1491
1492
1/2
✓ Branch 0 taken 1195 times.
✗ Branch 1 not taken.
1195 if(!m)
1493 {
1494 return NULL;
1495 }
1496
1497
2/2
✓ Branch 0 taken 38240 times.
✓ Branch 1 taken 1195 times.
39435 for(c=0; c<MIDI_TRACKS; c++)
1498 {
1499 38240 m->track[c].len = 0;
1500 38240 m->track[c].data = NULL;
1501 38240 }
1502
1503 1195 p_mgetw(&divisions,f,true);
1504 1195 m->divisions=divisions;
1505
1506
2/2
✓ Branch 0 taken 38240 times.
✓ Branch 1 taken 1195 times.
39435 for(c=0; c<MIDI_TRACKS; c++)
1507 {
1508 38240 p_mgetl(&len,f,true);
1509 38240 m->track[c].len=len;
1510
1511
2/2
✓ Branch 0 taken 23869 times.
✓ Branch 1 taken 14371 times.
38240 if(m->track[c].len > 0)
1512 {
1513 14371 m->track[c].data = (byte*)read_block(f, m->track[c].len, 0, true);
1514
1515
1/2
✓ Branch 0 taken 14371 times.
✗ Branch 1 not taken.
14371 if(!m->track[c].data)
1516 {
1517 destroy_midi(m);
1518 return NULL;
1519 }
1520 14371 }
1521 38240 }
1522
1523 LOCK_DATA(m, sizeof(MIDI));
1524
1525
2/2
✓ Branch 0 taken 38240 times.
✓ Branch 1 taken 1195 times.
39435 for(c=0; c<MIDI_TRACKS; c++)
1526 {
1527
2/2
✓ Branch 0 taken 14371 times.
✓ Branch 1 taken 23869 times.
38240 if(m->track[c].data)
1528 {
1529 LOCK_DATA(m->track[c].data, m->track[c].len);
1530 14371 }
1531 38240 }
1532
1533 1195 return m;
1534 1195 }
1535
1536 void clear_combo(int32_t i)
1537 {
1538 combobuf[i].clear();
1539 }
1540
1541 void clear_combos()
1542 {
1543 for(int32_t tmpcounter=0; tmpcounter<MAXCOMBOS; tmpcounter++)
1544 clear_combo(tmpcounter);
1545 }
1546
1547 void pack_combos()
1548 {
1549 int32_t di = 0;
1550
1551 for(int32_t si=0; si<1024; si+=2)
1552 combobuf[di++] = combobuf[si];
1553
1554 for(; di<1024; di++)
1555 clear_combo(di);
1556 }
1557
1558 63 void reset_tunes(zctune *tune)
1559 {
1560
2/2
✓ Branch 0 taken 15876 times.
✓ Branch 1 taken 63 times.
15939 for(int32_t i=0; i<MAXCUSTOMTUNES; i++)
1561 {
1562 15876 tune[i].reset();
1563 15876 }
1564 63 }
1565
1566
1567 /*void reset_midi(zcmidi_ *m)
1568 {
1569 m->title[0]=0;
1570 m->loop=1;
1571 m->volume=144;
1572 m->start=0;
1573 m->loop_start=-1;
1574 m->loop_end=-1;
1575 if(m->midi)
1576 {
1577 destroy_midi(m->midi);
1578 }
1579 m->midi=NULL;
1580 }
1581
1582
1583 void reset_midis(zcmidi_ *m)
1584 {
1585 for(int32_t i=0; i<MAXCUSTOMMIDIS; i++)
1586 {
1587 reset_midi(m+i);
1588 }
1589 }
1590 */
1591
1592 void reset_scr(int32_t scr)
1593 {
1594 /*
1595 byte *di=((byte*)TheMaps)+(scr*sizeof(mapscr));
1596 for(unsigned i=0; i<sizeof(mapscr); i++)
1597 *(di++) = 0;
1598 TheMaps[scr].valid=mVERSION;
1599 */
1600
1601 TheMaps[scr].zero_memory();
1602 //byte *di=((byte*)TheMaps)+(scr*sizeof(mapscr));
1603
1604 for(int32_t i=0; i<6; i++)
1605 {
1606 //these will be uncommented later
1607 //TheMaps[scr].layerxsize[i]=16;
1608 //TheMaps[scr].layerysize[i]=11;
1609 TheMaps[scr].layeropacity[i]=255;
1610 }
1611
1612 TheMaps[scr].valid=mVERSION;
1613
1614 }
1615
1616 /* For reference:
1617
1618 enum { qe_OK, qe_notfound, qe_invalid, qe_version, qe_obsolete,
1619 qe_missing, qe_internal, qe_pwd, qe_match, qe_minver };
1620 */
1621
1622 int32_t operator ==(DoorComboSet a, DoorComboSet b)
1623 {
1624 for(int32_t i=0; i<9; i++)
1625 {
1626 for(int32_t j=0; j<6; j++)
1627 {
1628 if(j<4)
1629 {
1630 if(a.doorcombo_u[i][j]!=b.doorcombo_u[i][j])
1631 {
1632 return false;
1633 }
1634
1635 if(a.doorcset_u[i][j]!=b.doorcset_u[i][j])
1636 {
1637 return false;
1638 }
1639
1640 if(a.doorcombo_d[i][j]!=b.doorcombo_d[i][j])
1641 {
1642 return false;
1643 }
1644
1645 if(a.doorcset_d[i][j]!=b.doorcset_d[i][j])
1646 {
1647 return false;
1648 }
1649 }
1650
1651 if(a.doorcombo_l[i][j]!=b.doorcombo_l[i][j])
1652 {
1653 return false;
1654 }
1655
1656 if(a.doorcset_l[i][j]!=b.doorcset_l[i][j])
1657 {
1658 return false;
1659 }
1660
1661 if(a.doorcombo_r[i][j]!=b.doorcombo_r[i][j])
1662 {
1663 return false;
1664 }
1665
1666 if(a.doorcset_r[i][j]!=b.doorcset_r[i][j])
1667 {
1668 return false;
1669 }
1670 }
1671
1672 if(i<2)
1673 {
1674 if(a.flags[i]!=b.flags[i])
1675 {
1676 return false;
1677 }
1678
1679 if(a.bombdoorcombo_u[i]!=b.bombdoorcombo_u[i])
1680 {
1681 return false;
1682 }
1683
1684 if(a.bombdoorcset_u[i]!=b.bombdoorcset_u[i])
1685 {
1686 return false;
1687 }
1688
1689 if(a.bombdoorcombo_d[i]!=b.bombdoorcombo_d[i])
1690 {
1691 return false;
1692 }
1693
1694 if(a.bombdoorcset_d[i]!=b.bombdoorcset_d[i])
1695 {
1696 return false;
1697 }
1698 }
1699
1700 if(i<3)
1701 {
1702 if(a.bombdoorcombo_l[i]!=b.bombdoorcombo_l[i])
1703 {
1704 return false;
1705 }
1706
1707 if(a.bombdoorcset_l[i]!=b.bombdoorcset_l[i])
1708 {
1709 return false;
1710 }
1711
1712 if(a.bombdoorcombo_r[i]!=b.bombdoorcombo_r[i])
1713 {
1714 return false;
1715 }
1716
1717 if(a.bombdoorcset_r[i]!=b.bombdoorcset_r[i])
1718 {
1719 return false;
1720 }
1721 }
1722
1723 if(a.walkthroughcombo[i]!=b.walkthroughcombo[i])
1724 {
1725 return false;
1726 }
1727
1728 if(a.walkthroughcset[i]!=b.walkthroughcset[i])
1729 {
1730 return false;
1731 }
1732 }
1733
1734 return true;
1735 }
1736
1737 int32_t doortranslations_u[9][4]=
1738 {
1739 {37,38,53,54},
1740 {37,38,39,40},
1741 {37,38,55,56},
1742 {37,38,39,40},
1743 {37,38,53,54},
1744 {37,38,53,54},
1745 {37,38,53,54},
1746 {7,8,23,24},
1747 {7,8,41,42}
1748 };
1749
1750 int32_t doortranslations_d[9][4]=
1751 {
1752 {117,118,133,134},
1753 {135,136,133,134},
1754 {119,120,133,134},
1755 {135,136,133,134},
1756 {117,118,133,134},
1757 {117,118,133,134},
1758 {117,118,133,134},
1759 {151,152,167,168},
1760 {137,138,167,168},
1761 };
1762
1763 //enum {dt_pass=0, dt_lock, dt_shut, dt_boss, dt_olck, dt_osht, dt_obos, dt_wall, dt_bomb, dt_walk, dt_max};
1764 int32_t doortranslations_l[9][6]=
1765 {
1766 {66,67,82,83,98,99},
1767 {66,68,82,84,98,100},
1768 {66,69,82,85,98,101},
1769 {66,68,82,84,98,100},
1770 {66,67,82,83,98,99},
1771 {66,67,82,83,98,99},
1772 {66,67,82,83,98,99},
1773 {64,65,80,81,96,97},
1774 {64,65,80,114,96,97},
1775 };
1776
1777 int32_t doortranslations_r[9][6]=
1778 {
1779
1780 {76,77,92,93,108,109},
1781 {75,77,91,93,107,109},
1782 {74,77,90,93,106,109},
1783 {75,77,91,93,107,109},
1784 {76,77,92,93,108,109},
1785 {76,77,92,93,108,109},
1786 {76,77,92,93,108,109},
1787 {78,79,94,95,110,111},
1788 {78,79,125,95,110,111},
1789 };
1790
1791 int32_t tdcmbdat(int32_t map, int32_t scr, int32_t pos)
1792 {
1793 return (TheMaps[map*MAPSCRS+TEMPLATE].data[pos]&0xFF)+((TheMaps[map*MAPSCRS+scr].old_cpage)<<8);
1794 }
1795
1796 int32_t tdcmbcset(int32_t map, int32_t scr, int32_t pos)
1797 {
1798 //these are here to bypass compiler warnings about unused arguments
1799 map=map;
1800 scr=scr;
1801 pos=pos;
1802
1803 //what does this function do?
1804 // return TheMaps[map*MAPSCRS+TEMPLATE].cset[pos];
1805 return 2;
1806 }
1807
1808 int32_t MakeDoors(int32_t map, int32_t scr)
1809 {
1810 if(!(TheMaps[map*MAPSCRS+scr].valid&mVALID))
1811 {
1812 return 0;
1813 }
1814
1815 DoorComboSet tempdcs;
1816 memset(&tempdcs, 0, sizeof(DoorComboSet));
1817
1818 //up
1819 for(int32_t i=0; i<9; i++)
1820 {
1821 for(int32_t j=0; j<4; j++)
1822 {
1823 tempdcs.doorcombo_u[i][j]=tdcmbdat(map,scr,doortranslations_u[i][j]);
1824 tempdcs.doorcset_u[i][j]=tdcmbcset(map,scr,doortranslations_u[i][j]);
1825 }
1826 }
1827
1828 tempdcs.bombdoorcombo_u[0]=tdcmbdat(map,scr,57);
1829 tempdcs.bombdoorcset_u[0]=tdcmbcset(map,scr,57);
1830 tempdcs.bombdoorcombo_u[1]=tdcmbdat(map,scr,58);
1831 tempdcs.bombdoorcset_u[1]=tdcmbcset(map,scr,58);
1832 tempdcs.walkthroughcombo[0]=tdcmbdat(map,scr,34);
1833 tempdcs.walkthroughcset[0]=tdcmbdat(map,scr,34);
1834
1835 //down
1836 for(int32_t i=0; i<9; i++)
1837 {
1838 for(int32_t j=0; j<4; j++)
1839 {
1840 tempdcs.doorcombo_d[i][j]=tdcmbdat(map,scr,doortranslations_d[i][j]);
1841 tempdcs.doorcset_d[i][j]=tdcmbcset(map,scr,doortranslations_d[i][j]);
1842 }
1843 }
1844
1845 tempdcs.bombdoorcombo_d[0]=tdcmbdat(map,scr,121);
1846
1847 tempdcs.bombdoorcset_d[0]=tdcmbcset(map,scr,121);
1848 tempdcs.bombdoorcombo_d[1]=tdcmbdat(map,scr,122);
1849 tempdcs.bombdoorcset_d[1]=tdcmbcset(map,scr,122);
1850 tempdcs.walkthroughcombo[1]=tdcmbdat(map,scr,34);
1851 tempdcs.walkthroughcset[1]=tdcmbdat(map,scr,34);
1852
1853 //left
1854 // TheMaps[i*MAPSCRS+j].warpdmap=TheOldMap.warpdmap;
1855 for(int32_t i=0; i<9; i++)
1856 {
1857 for(int32_t j=0; j<6; j++)
1858 {
1859 tempdcs.doorcombo_l[i][j]=tdcmbdat(map,scr,doortranslations_l[i][j]);
1860 tempdcs.doorcset_l[i][j]=tdcmbcset(map,scr,doortranslations_l[i][j]);
1861 }
1862 }
1863
1864 for(int32_t j=0; j>6; j++)
1865 {
1866 if((j!=2)&&(j!=3))
1867 {
1868 tempdcs.doorcombo_l[dt_bomb][j]=TheMaps[map*MAPSCRS+scr].data[doortranslations_l[dt_bomb][j]];
1869 tempdcs.doorcset_l[dt_bomb][j]=TheMaps[map*MAPSCRS+scr].cset[doortranslations_l[dt_bomb][j]];
1870 }
1871 }
1872
1873 tempdcs.bombdoorcombo_l[0]=0;
1874 tempdcs.bombdoorcset_l[0]=tdcmbcset(map,scr,115);
1875 tempdcs.bombdoorcombo_l[1]=tdcmbdat(map,scr,115);
1876 tempdcs.bombdoorcset_l[1]=tdcmbcset(map,scr,115);
1877 tempdcs.bombdoorcombo_l[2]=0;
1878 tempdcs.bombdoorcset_l[2]=tdcmbcset(map,scr,115);
1879 tempdcs.walkthroughcombo[2]=tdcmbdat(map,scr,34);
1880 tempdcs.walkthroughcset[2]=tdcmbdat(map,scr,34);
1881
1882 //right
1883 for(int32_t i=0; i<9; i++)
1884 {
1885 for(int32_t j=0; j<6; j++)
1886 {
1887 tempdcs.doorcombo_r[i][j]=tdcmbdat(map,scr,doortranslations_r[i][j]);
1888 tempdcs.doorcset_r[i][j]=tdcmbcset(map,scr,doortranslations_r[i][j]);
1889 }
1890 }
1891
1892 for(int32_t j=0; j>6; j++)
1893 {
1894 if((j!=2)&&(j!=3))
1895 {
1896 tempdcs.doorcombo_r[dt_bomb][j]=TheMaps[map*MAPSCRS+scr].data[doortranslations_r[dt_bomb][j]];
1897 tempdcs.doorcset_r[dt_bomb][j]=TheMaps[map*MAPSCRS+scr].cset[doortranslations_r[dt_bomb][j]];
1898 }
1899 }
1900
1901 tempdcs.bombdoorcombo_r[0]=0;
1902 tempdcs.bombdoorcset_r[0]=tdcmbcset(map,scr,124);
1903 tempdcs.bombdoorcombo_r[1]=tdcmbdat(map,scr,124);
1904 tempdcs.bombdoorcset_r[1]=tdcmbcset(map,scr,124);
1905 tempdcs.bombdoorcombo_r[2]=0;
1906 tempdcs.bombdoorcset_r[2]=tdcmbcset(map,scr,124);
1907 tempdcs.walkthroughcombo[3]=tdcmbdat(map,scr,34);
1908 tempdcs.walkthroughcset[3]=tdcmbdat(map,scr,34);
1909
1910 int32_t k;
1911
1912 for(k=0; k<door_combo_set_count; k++)
1913 {
1914 if(DoorComboSets[k]==tempdcs)
1915 {
1916 break;
1917 }
1918 }
1919
1920 if(k==door_combo_set_count)
1921 {
1922 DoorComboSets[k]=tempdcs;
1923 sprintf(DoorComboSets[k].name, "Door Combo Set %d", k);
1924 ++door_combo_set_count;
1925 }
1926
1927 return k;
1928 /*
1929 doorcombo_u[9][4];
1930 doorcset_u[9][4];
1931 doorcombo_d[9][4];
1932 doorcset_d[9][4];
1933 doorcombo_l[9][6];
1934 doorcset_l[9][6];
1935 doorcombo_r[9][6];
1936 doorcset_r[9][6];
1937 bombdoorcombo_u[2];
1938 bombdoorcset_u[2];
1939 bombdoorcombo_d[2];
1940 bombdoorcset_d[2];
1941 bombdoorcombo_l[3];
1942 bombdoorcset_l[3];
1943 bombdoorcombo_r[3];
1944 bombdoorcset_r[3];
1945 walkthroughcombo[4];
1946 walkthroughcset[4];
1947 */
1948 }
1949
1950 INLINE int32_t tcmbdat2(int32_t map, int32_t scr, int32_t pos)
1951 {
1952 return (TheMaps[map*MAPSCRS+TEMPLATE2].data[pos]&0xFF)+((TheMaps[map*MAPSCRS+scr].old_cpage)<<8);
1953 }
1954
1955 INLINE int32_t tcmbcset2(int32_t map, int32_t pos)
1956 {
1957
1958 return TheMaps[map*MAPSCRS+TEMPLATE2].cset[pos];
1959 }
1960
1961 INLINE int32_t tcmbflag2(int32_t map, int32_t pos)
1962 {
1963 return TheMaps[map*MAPSCRS+TEMPLATE2].sflag[pos];
1964 }
1965
1966
1967 void get_questpwd(char *encrypted_pwd, int16_t pwdkey, char *pwd)
1968 {
1969 char temp_pwd[30];
1970 memset(temp_pwd,0,30);
1971
1972 if(pwdkey!=0)
1973 {
1974 memcpy(temp_pwd,encrypted_pwd,30);
1975 temp_pwd[29]=0;
1976
1977 for(int32_t i=0; i<30; i++)
1978 {
1979 temp_pwd[i] -= pwdkey;
1980 int32_t t=pwdkey>>15;
1981 pwdkey = (pwdkey<<1)+t;
1982 }
1983 }
1984
1985 memcpy(pwd,temp_pwd,30);
1986 }
1987
1988
1989
1990 bool check_questpwd(zquestheader *Header, char *pwd)
1991 {
1992 #if DEVLEVEL > 3
1993 return true;
1994 #endif
1995
1996 if ( (!strcmp(pwd, (char*)clavio)) ) return true;
1997 cvs_MD5Context ctx;
1998 uint8_t md5sum[16];
1999
2000 cvs_MD5Init(&ctx);
2001 cvs_MD5Update(&ctx, (const uint8_t*)pwd, (unsigned)strlen(pwd));
2002 cvs_MD5Final(md5sum, &ctx);
2003
2004 return (memcmp(Header->pwd_hash,md5sum,16)==0);
2005
2006 }
2007
2008 62 void print_quest_metadata(zquestheader const& tempheader, char const* path, byte qst_num)
2009 {
2010 62 zprint2("\n");
2011 62 zprint2("[ZQUEST CREATOR METADATA]\n");
2012
1/2
✓ Branch 0 taken 62 times.
✗ Branch 1 not taken.
62 if(qst_num < moduledata.max_quest_files)
2013 zprint2("Loading module quest %d\n", qst_num+1);
2014
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 62 times.
62 if(path) zprint2("Loading '%s'\n", path);
2015
1/2
✓ Branch 0 taken 62 times.
✗ Branch 1 not taken.
62 if ( tempheader.new_version_id_main > 0 )
2016 {
2017
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 62 times.
62 if(tempheader.new_version_id_fourth > 0)
2018 zprint2("Last saved in ZQuest Version %d.%d.%d.%d ",
2019 tempheader.new_version_id_main,tempheader.new_version_id_second,
2020 tempheader.new_version_id_third,tempheader.new_version_id_fourth);
2021 62 else zprint2("Last saved in ZQuest Version: %d.%d.%d ",
2022 62 tempheader.new_version_id_main,tempheader.new_version_id_second,
2023 62 tempheader.new_version_id_third);
2024 62 }
2025 else
2026 {
2027 switch ( tempheader.zelda_version )
2028 {
2029 case 0x255:
2030 {
2031 zprint2("Last saved in ZQuest Version: 2.55.0, %s: %d", tempheader.getAlphaStr(), tempheader.getAlphaVer());
2032 break;
2033 }
2034 case 0x254:
2035 {
2036 zprint2("Last saved in ZQuest Version: 2.54.0, Alpha Build ID: %d", tempheader.build);
2037 break;
2038 }
2039 case 0x250:
2040 {
2041 switch(tempheader.build)
2042 {
2043 case 19:
2044 zprint2("Last saved in ZQuest Version: 2.50.0, Gamma 1"); break;
2045 case 20:
2046 zprint2("Last saved in ZQuest Version: 2.50.0, Gamma 2"); break;
2047 case 21:
2048 zprint2("Last saved in ZQuest Version: 2.50.0, Gamma 3"); break;
2049 case 22:
2050 zprint2("Last saved in ZQuest Version: 2.50.0, Gamma 4"); break;
2051 case 23:
2052 zprint2("Last saved in ZQuest Version: 2.50.0, Gamma 5"); break;
2053 case 24:
2054 zprint2("Last saved in ZQuest Version: 2.50.0, Release"); break;
2055 case 25:
2056 zprint2("Last saved in ZQuest Version: 2.50.1, Gamma 1"); break;
2057 case 26:
2058 zprint2("Last saved in ZQuest Version: 2.50.1, Gamma 2"); break;
2059 case 27:
2060 zprint2("Last saved in ZQuest Version: 2.50.1, Gamma 3"); break;
2061 case 28:
2062 zprint2("Last saved in ZQuest Version: 2.50.1, Release"); break;
2063 case 29:
2064 zprint2("Last saved in ZQuest Version: 2.50.2, Release"); break;
2065 case 30:
2066 zprint2("Last saved in ZQuest Version: 2.50.3, Gamma 1"); break;
2067 case 31:
2068 zprint2("Last saved in ZQuest Version: 2.53.0, Prior to Gamma 3"); break;
2069 case 32:
2070 zprint2("Last saved in ZQuest Version: 2.53.0"); break;
2071 case 33:
2072 zprint2("Last saved in ZQuest Version: 2.53.1"); break;
2073 default:
2074 zprint2("Last saved in ZQuest Version: %x, Build %d", tempheader.zelda_version,tempheader.build); break;
2075
2076 }
2077 break;
2078 }
2079
2080 case 0x211:
2081 {
2082 zprint2("Last saved in ZQuest Version: 2.11, Beta %d", tempheader.build); break;
2083 }
2084 case 0x210:
2085 {
2086 zprint2("Last saved in ZQuest Version: 2.10.x");
2087 if ( tempheader.build ) zprint2("Beta/Build %d\n", tempheader.build);
2088 break;
2089 }
2090 /* These versions cannot be handled here; they will be incorrect at this time. -Z
2091 case 0x193:
2092 {
2093 zprint2("Last saved in ZQuest Version: 1.93, Beta %d\n", tempheader.build); break;
2094 }
2095 case 0x192:
2096 {
2097 zprint2("Last saved in ZQuest Version: 1.92, Beta %d\n", tempheader.build); break;
2098 }
2099 case 0x190:
2100 {
2101 zprint2("Last saved in ZQuest Version: 1.90, Beta/Build %d\n", tempheader.build); break;
2102 }
2103 case 0x184:
2104 {
2105 zprint2("Last saved in ZQuest Version: 1.84, Beta/Build %d\n", tempheader.build); break;
2106 }
2107 case 0x183:
2108 {
2109 zprint2("Last saved in ZQuest Version: 1.83, Beta/Build %d\n", tempheader.build); break;
2110 }
2111 case 0x180:
2112 {
2113 zprint2("Last saved in ZQuest Version: 1.80, Beta/Build %d\n", tempheader.build); break;
2114 }
2115 default:
2116 {
2117 zprint2("Last saved in ZQuest Version: %x, Beta %d\n", tempheader.zelda_version,tempheader.build); break;
2118 }
2119 */
2120 }
2121 }
2122
3/4
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 59 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
62 if(!tempheader.is_legacy() && tempheader.getAlphaVer())
2123 3 zprint2("%s\n", tempheader.getAlphaVerStr());
2124 59 else zprint2("\n");
2125
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 3 times.
62 if ( tempheader.made_in_module_name[0] ) zprint2("Created with ZC Module: %s\n\n", tempheader.made_in_module_name);
2126
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 3 times.
62 if ( tempheader.new_version_devsig[0] ) zprint2("Developr Signoff by: %s\n", tempheader.new_version_devsig);
2127
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 3 times.
62 if ( tempheader.new_version_compilername[0] ) zprint2("Compiled with: %s, (ID: %d)\n", tempheader.new_version_compilername, tempheader.compilerid);
2128
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 3 times.
62 if ( tempheader.new_version_compilerversion[0] ) zprint2("Compiler Version: %s, (%d,%d,%d,%d)\n", tempheader.new_version_compilerversion,tempheader.compilerversionnumber_first,tempheader.compilerversionnumber_second,tempheader.compilerversionnumber_third,tempheader.compilerversionnumber_fourth);
2129
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 62 times.
62 if ( tempheader.product_name[0] ) zprint2("Project ID: %s\n", tempheader.product_name);
2130
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 3 times.
62 if ( tempheader.new_version_id_date_day ) zprint2("Editor Built at date and time: %d-%d-%d at @ %s %s\n", tempheader.new_version_id_date_day, tempheader.new_version_id_date_month, tempheader.new_version_id_date_year, tempheader.build_timestamp, tempheader.build_timezone);
2131 62 zprint2("\n");
2132 62 }
2133
2134 75 int32_t readheader(PACKFILE *f, zquestheader *Header, bool keepdata, byte printmetadata)
2135 {
2136 int32_t dummy;
2137 zquestheader tempheader;
2138 75 memcpy(&tempheader, Header, sizeof(tempheader));
2139 char dummybuf[80];
2140 byte temp_map_count;
2141 byte temp_midi_flags[MIDIFLAGS_SIZE];
2142 word version;
2143 char temp_pwd[30], temp_pwd2[30];
2144 int16_t temp_pwdkey;
2145 cvs_MD5Context ctx;
2146 75 memset(temp_midi_flags, 0, MIDIFLAGS_SIZE);
2147 75 memset(&tempheader, 0, sizeof(tempheader));
2148 75 memset(FFCore.quest_format, 0, sizeof(FFCore.quest_format));
2149
2150
2151
2152
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if(!pfread(tempheader.id_str,sizeof(tempheader.id_str),f,true)) // first read old header
2153 {
2154 Z_message("Unable to read header string\n");
2155 return qe_invalid;
2156 }
2157
2158 // check header
2159
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(strcmp(tempheader.id_str,QH_NEWIDSTR))
2160 {
2161 if(strcmp(tempheader.id_str,QH_IDSTR))
2162 {
2163 Z_message("Invalid header string: '%s' (was expecting '%s' or '%s')\n", tempheader.id_str, QH_IDSTR, QH_NEWIDSTR);
2164 return qe_invalid;
2165 }
2166 }
2167
2168 75 int32_t templatepath_len=0;
2169
2170 75 tempheader.external_zinfo = false;
2171 75 read_zinfo = false;
2172
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!strcmp(tempheader.id_str,QH_IDSTR)) //pre-1.93 version
2173 {
2174 byte padding;
2175
2176 if(!p_getc(&padding,f,true))
2177 {
2178 return qe_invalid;
2179 }
2180
2181 if(!p_igetw(&tempheader.zelda_version,f,true))
2182 {
2183 return qe_invalid;
2184 }
2185
2186 FFCore.quest_format[vZelda] = tempheader.zelda_version;
2187
2188 if(tempheader.zelda_version > ZELDA_VERSION)
2189 {
2190 return qe_version;
2191 }
2192
2193 FFCore.quest_format[vZelda] = tempheader.zelda_version;
2194
2195 if(strcmp(tempheader.id_str,QH_IDSTR))
2196 {
2197 return qe_invalid;
2198 }
2199
2200 if(bad_version(tempheader.zelda_version))
2201 {
2202 return qe_obsolete;
2203 }
2204
2205 if(!p_igetw(&tempheader.internal,f,true))
2206 {
2207 return qe_invalid;
2208 }
2209
2210 if(!p_getc(&tempheader.quest_number,f,true))
2211 {
2212 return qe_invalid;
2213 }
2214
2215 FFCore.quest_format[qQuestNumber] = tempheader.quest_number;
2216
2217 if(!pfread(&quest_rules[0],2,f,true))
2218 {
2219 return qe_invalid;
2220 }
2221
2222 if(!p_getc(&temp_map_count,f,true))
2223 {
2224 return qe_invalid;
2225 }
2226
2227 FFCore.quest_format[qMapCount] = temp_map_count;
2228
2229 if(!p_getc(&tempheader.old_str_count,f,true))
2230 {
2231 return qe_invalid;
2232 }
2233
2234 if(!p_getc(&tempheader.data_flags[ZQ_TILES],f,true))
2235 {
2236 return qe_invalid;
2237 }
2238
2239 if(!pfread(temp_midi_flags,4,f,true))
2240 {
2241 return qe_invalid;
2242 }
2243
2244 if(!p_getc(&tempheader.data_flags[ZQ_CHEATS2],f,true))
2245 {
2246 return qe_invalid;
2247 }
2248
2249 if(!pfread(dummybuf,14,f,true))
2250 {
2251 return qe_invalid;
2252 }
2253
2254 if(!pfread(&quest_rules[2],2,f,true))
2255 {
2256 return qe_invalid;
2257 }
2258
2259 if(!p_getc(&dummybuf,f,true))
2260 {
2261 return qe_invalid;
2262 }
2263
2264 if(!pfread(tempheader.version,sizeof(tempheader.version),f,true))
2265 {
2266 return qe_invalid;
2267 }
2268
2269 if(!pfread(tempheader.title,sizeof(tempheader.title),f,true))
2270 {
2271 return qe_invalid;
2272 }
2273
2274 if(!pfread(tempheader.author,sizeof(tempheader.author),f,true))
2275 {
2276 return qe_invalid;
2277 }
2278
2279 if(!p_getc(&padding,f,true))
2280 {
2281 return qe_invalid;
2282 }
2283
2284 if(!p_igetw(&temp_pwdkey,f,true))
2285 {
2286 return qe_invalid;
2287 }
2288
2289 if(!pfread(temp_pwd,30,f,true))
2290 {
2291 return qe_invalid;
2292 }
2293
2294 get_questpwd(temp_pwd, temp_pwdkey, temp_pwd2);
2295 cvs_MD5Init(&ctx);
2296 cvs_MD5Update(&ctx, (const uint8_t*)temp_pwd2, (unsigned)strlen(temp_pwd2));
2297 cvs_MD5Final(tempheader.pwd_hash, &ctx);
2298
2299 if(tempheader.zelda_version < 0x177) // lacks new header stuff...
2300 {
2301 //memset(tempheader.minver,0,20); // char minver[9], byte build, byte foo[10]
2302 // Not anymore...
2303 memset(tempheader.minver,0,9);
2304 tempheader.build=0;
2305 tempheader.use_keyfile=0;
2306 memset(tempheader.old_foo, 0, 9);
2307 }
2308 else
2309 {
2310 if(!pfread(tempheader.minver,sizeof(tempheader.minver),f,true))
2311 {
2312 return qe_invalid;
2313 }
2314
2315 if(!p_getc(&tempheader.build,f,true))
2316 {
2317 return qe_invalid;
2318 }
2319
2320 FFCore.quest_format[vBuild] = tempheader.build;
2321
2322 if(!p_getc(&tempheader.use_keyfile,f,true))
2323 {
2324 return qe_invalid;
2325 }
2326
2327 if(!pfread(dummybuf,9,f,true))
2328 {
2329 return qe_invalid;
2330 }
2331 } // starting at minver
2332
2333 if(tempheader.zelda_version < 0x187) // lacks newer header stuff...
2334 {
2335 memset(&quest_rules[4],0,16); // word rules3..rules10
2336 }
2337 else
2338 {
2339 if(!pfread(&quest_rules[4],16,f,true)) // read new header additions
2340 {
2341 return qe_invalid; // starting at rules3
2342 }
2343
2344 if(tempheader.zelda_version <= 0x190)
2345 {
2346 set_bit(quest_rules,qr_MEANPLACEDTRAPS,0);
2347 }
2348 }
2349
2350 if((tempheader.zelda_version < 0x192)||
2351 ((tempheader.zelda_version == 0x192)&&(tempheader.build<149)))
2352 {
2353 set_bit(quest_rules,qr_BRKNSHLDTILES,(get_bit(quest_rules,qr_BRKBLSHLDS_DEP)));
2354 set_bit(deprecated_rules,qr_BRKBLSHLDS_DEP,1);
2355 }
2356
2357 if(tempheader.zelda_version >= 0x192) // lacks newer header stuff...
2358 {
2359 byte *mf=temp_midi_flags;
2360
2361 if((tempheader.zelda_version == 0x192)&&(tempheader.build<178))
2362 {
2363 mf=(byte*)dummybuf;
2364 }
2365
2366 if(!pfread(mf,32,f,true)) // read new header additions
2367 {
2368 return qe_invalid; // starting at foo2
2369 }
2370
2371 if(!pfread(dummybuf,18,f,true)) // read new header additions
2372 {
2373 return qe_invalid; // starting at foo2
2374 }
2375 }
2376
2377 if((tempheader.zelda_version < 0x192)||
2378 ((tempheader.zelda_version == 0x192)&&(tempheader.build<145)))
2379 {
2380 memset(tempheader.templatepath,0,2048);
2381 }
2382 else
2383 {
2384 if(!pfread(tempheader.templatepath,280,f,true)) // read templatepath
2385 {
2386 return qe_invalid;
2387 }
2388 }
2389
2390 if((tempheader.zelda_version < 0x192)||
2391 ((tempheader.zelda_version == 0x192)&&(tempheader.build<186)))
2392 {
2393 tempheader.use_keyfile=0;
2394 }
2395 }
2396 else
2397 {
2398 //section id
2399
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if(!p_mgetl(&dummy,f,true))
2400 {
2401 return qe_invalid;
2402 }
2403
2404 //section version info
2405
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!p_igetw(&version,f,true))
2406 {
2407 return qe_invalid;
2408 }
2409
2410 75 FFCore.quest_format[vHeader] = version;
2411
2412
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!p_igetw(&dummy,f,true))
2413 {
2414 return qe_invalid;
2415 }
2416
2417 //section size
2418
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!p_igetl(&dummy,f,true))
2419 {
2420 return qe_invalid;
2421 }
2422
2423 //finally... section data
2424
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!p_igetw(&tempheader.zelda_version,f,true))
2425 {
2426 return qe_invalid;
2427 }
2428
2429 75 FFCore.quest_format[vZelda] = tempheader.zelda_version;
2430
2431 //do some quick checking...
2432
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if(tempheader.zelda_version > ZELDA_VERSION)
2433 {
2434 return qe_version;
2435 }
2436
2437
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if(strcmp(tempheader.id_str,QH_NEWIDSTR))
2438 {
2439 return qe_invalid;
2440 }
2441
2442
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if(bad_version(tempheader.zelda_version))
2443 {
2444 return qe_obsolete;
2445 }
2446
2447
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!p_getc(&tempheader.build,f,true))
2448 {
2449 return qe_invalid;
2450 }
2451
2452 75 FFCore.quest_format[vBuild] = tempheader.build;
2453
2454
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if(version<3)
2455 {
2456 if(!pfread(temp_pwd,30,f,true))
2457 {
2458 return qe_invalid;
2459 }
2460
2461 if(!p_igetw(&temp_pwdkey,f,true))
2462 {
2463 return qe_invalid;
2464 }
2465
2466 get_questpwd(temp_pwd, temp_pwdkey, temp_pwd2);
2467 cvs_MD5Init(&ctx);
2468 cvs_MD5Update(&ctx, (const uint8_t*)temp_pwd2, (unsigned)strlen(temp_pwd2));
2469 cvs_MD5Final(tempheader.pwd_hash, &ctx);
2470 }
2471 else
2472 {
2473
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!pfread(tempheader.pwd_hash,sizeof(tempheader.pwd_hash),f,true))
2474 {
2475 return qe_invalid;
2476 }
2477 }
2478
2479
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!p_igetw(&tempheader.internal,f,true))
2480 {
2481 return qe_invalid;
2482 }
2483
2484
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!p_getc(&tempheader.quest_number,f,true))
2485 {
2486 return qe_invalid;
2487 }
2488
2489 75 FFCore.quest_format[qQuestNumber] = tempheader.quest_number;
2490
2491
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!pfread(tempheader.version,sizeof(tempheader.version),f,true))
2492 {
2493 return qe_invalid;
2494 }
2495
2496 //FFCore.quest_format[qQuestVersion] = tempheader.version;
2497 //needs to be copied as char[9] or stored as a s.str
2498
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!pfread(tempheader.minver,sizeof(tempheader.minver),f,true))
2499 {
2500 return qe_invalid;
2501 }
2502
2503 //FFCore.quest_format[qMinQuestVersion] = tempheader.minver;
2504 //needs to be copied as char[9] or stored as a s.str
2505
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!pfread(tempheader.title,sizeof(tempheader.title),f,true))
2506 {
2507 return qe_invalid;
2508 }
2509
2510
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!pfread(tempheader.author,sizeof(tempheader.author),f,true))
2511 {
2512 return qe_invalid;
2513 }
2514
2515
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!p_getc(&tempheader.use_keyfile,f,true))
2516 {
2517 return qe_invalid;
2518 }
2519
2520 /*
2521 if(!pfread(tempheader.data_flags,sizeof(tempheader.data_flags),f,true))
2522 {
2523 return qe_invalid;
2524 }
2525 */
2526
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!p_getc(&tempheader.data_flags[ZQ_TILES],f,true))
2527 {
2528 return qe_invalid;
2529 }
2530
2531
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!pfread(&dummybuf,4,f,true))
2532 {
2533 return qe_invalid;
2534 }
2535
2536
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!p_getc(&tempheader.data_flags[ZQ_CHEATS2],f,true))
2537 {
2538 return qe_invalid;
2539 }
2540
2541
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!pfread(dummybuf,14,f,true))
2542 {
2543 return qe_invalid;
2544 }
2545
2546 75 templatepath_len=sizeof(tempheader.templatepath);
2547
2548
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(version==1)
2549 {
2550 templatepath_len=280;
2551 }
2552
2553
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!pfread(tempheader.templatepath,templatepath_len,f,true))
2554 {
2555 return qe_invalid;
2556 }
2557
2558
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 if(!p_getc(&temp_map_count,f,true))
2559 {
2560 return qe_invalid;
2561 }
2562
2563
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 59 times.
75 if(version>=4)
2564 {
2565
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tempheader.new_version_id_main,f,true))
2566 {
2567 return qe_invalid;
2568 }
2569
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tempheader.new_version_id_second,f,true))
2570 {
2571 return qe_invalid;
2572 }
2573
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tempheader.new_version_id_third,f,true))
2574 {
2575 return qe_invalid;
2576 }
2577
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tempheader.new_version_id_fourth,f,true))
2578 {
2579 return qe_invalid;
2580 }
2581
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tempheader.new_version_id_alpha,f,true))
2582 {
2583 return qe_invalid;
2584 }
2585
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tempheader.new_version_id_beta,f,true))
2586 {
2587 return qe_invalid;
2588 }
2589
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tempheader.new_version_id_gamma,f,true))
2590 {
2591 return qe_invalid;
2592 }
2593
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tempheader.new_version_id_release,f,true))
2594 {
2595 return qe_invalid;
2596 }
2597
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetw(&tempheader.new_version_id_date_year,f,true))
2598 {
2599 return qe_invalid;
2600 }
2601
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&tempheader.new_version_id_date_month,f,true))
2602 {
2603 return qe_invalid;
2604 }
2605
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&tempheader.new_version_id_date_day,f,true))
2606 {
2607 return qe_invalid;
2608 }
2609
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&tempheader.new_version_id_date_hour,f,true))
2610 {
2611 return qe_invalid;
2612 }
2613
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&tempheader.new_version_id_date_minute,f,true))
2614 {
2615 return qe_invalid;
2616 }
2617
2618
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!pfread(tempheader.new_version_devsig,256,f,true))
2619 {
2620 return qe_invalid;
2621 }
2622
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!strcmp(tempheader.new_version_devsig, "Venrob"))
2623 strcpy(tempheader.new_version_devsig, "EmilyV99");
2624
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!pfread(tempheader.new_version_compilername,256,f,true))
2625 {
2626 return qe_invalid;
2627 }
2628
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!pfread(tempheader.new_version_compilerversion,256,f,true))
2629 {
2630 return qe_invalid;
2631 }
2632
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!pfread(tempheader.product_name,1024,f,true))
2633 {
2634 return qe_invalid;
2635 }
2636
2637
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&tempheader.compilerid,f,true))
2638 {
2639 return qe_invalid;
2640 }
2641
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tempheader.compilerversionnumber_first,f,true))
2642 {
2643 return qe_invalid;
2644 }
2645
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tempheader.compilerversionnumber_second,f,true))
2646 {
2647 return qe_invalid;
2648 }
2649
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tempheader.compilerversionnumber_third,f,true))
2650 {
2651 return qe_invalid;
2652 }
2653
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tempheader.compilerversionnumber_fourth,f,true))
2654 {
2655 return qe_invalid;
2656 }
2657
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetw(&tempheader.developerid,f,true))
2658 {
2659 return qe_invalid;
2660 }
2661
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!pfread(tempheader.made_in_module_name,1024,f,true))
2662 {
2663 return qe_invalid;
2664 }
2665
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!pfread(tempheader.build_datestamp,256,f,true))
2666 {
2667 return qe_invalid;
2668 }
2669
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!pfread(tempheader.build_timestamp,256,f,true))
2670 {
2671 return qe_invalid;
2672 }
2673 16 }
2674 else // <4
2675 {
2676 59 tempheader.new_version_id_main = 0;
2677 59 tempheader.new_version_id_second = 0;
2678 59 tempheader.new_version_id_third = 0;
2679 59 tempheader.new_version_id_fourth = 0;
2680 59 tempheader.new_version_id_alpha = 0;
2681 59 tempheader.new_version_id_beta = 0;
2682 59 tempheader.new_version_id_gamma = 0;
2683 59 tempheader.new_version_id_release = 0;
2684 59 tempheader.new_version_id_date_year = 0;
2685 59 tempheader.new_version_id_date_month = 0;
2686 59 tempheader.new_version_id_date_day = 0;
2687 59 tempheader.new_version_id_date_hour = 0;
2688 59 tempheader.new_version_id_date_minute = 0;
2689
2690 59 memset(tempheader.new_version_devsig, 0, 256);
2691 59 memset(tempheader.new_version_compilername, 0, 256);
2692 59 memset(tempheader.new_version_compilerversion, 0, 256);
2693 59 memset(tempheader.product_name, 0, 1024);
2694 59 strcpy(tempheader.product_name, "ZQuest Creator Suite");
2695
2696 59 tempheader.compilerid = 0;
2697 59 tempheader.compilerversionnumber_first = 0;
2698 59 tempheader.compilerversionnumber_second = 0;
2699 59 tempheader.compilerversionnumber_third = 0;
2700 59 tempheader.compilerversionnumber_fourth = 0;
2701 59 tempheader.developerid = 0;
2702
2703 59 memset(tempheader.made_in_module_name, 0, 1024);
2704 59 memset(tempheader.build_datestamp, 0, 256);
2705 59 memset(tempheader.build_timestamp, 0, 256);
2706 }
2707
2708
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 59 times.
75 if ( version >= 5 )
2709 {
2710
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!pfread(tempheader.build_timezone,6,f,true))
2711 {
2712 return qe_invalid;
2713 }
2714 16 }
2715 else // < 5
2716 {
2717 59 memset(tempheader.build_timezone, 0, 6);
2718 }
2719
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 16 times.
75 if ( version >= 6 )
2720 {
2721 byte b;
2722
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&b,f,true))
2723 {
2724 return qe_invalid;
2725 }
2726 16 tempheader.external_zinfo = b?true:false;
2727 16 read_zinfo = true;
2728 16 }
2729
2730
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 59 times.
75 if(version >= 7)
2731 {
2732
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&(tempheader.new_version_is_nightly),f,true))
2733 {
2734 return qe_invalid;
2735 }
2736 16 }
2737 else
2738 {
2739 59 tempheader.new_version_is_nightly = false;
2740
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(tempheader.zelda_version < 0x255)
2741 {
2742
1/5
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
59 switch(tempheader.zelda_version)
2743 {
2744 case 0x254:
2745 tempheader.new_version_id_main = 2;
2746 tempheader.new_version_id_second = 54;
2747 break;
2748 case 0x250:
2749
5/16
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 13 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 5 times.
✓ Branch 11 taken 23 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 10 times.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
59 switch(tempheader.build)
2750 {
2751 case 19:
2752 tempheader.new_version_id_main = 2;
2753 tempheader.new_version_id_second = 50;
2754 tempheader.new_version_id_gamma = 1;
2755 break;
2756 case 20:
2757 tempheader.new_version_id_main = 2;
2758 tempheader.new_version_id_second = 50;
2759 tempheader.new_version_id_gamma = 2;
2760 break;
2761 case 21:
2762 tempheader.new_version_id_main = 2;
2763 tempheader.new_version_id_second = 50;
2764 tempheader.new_version_id_gamma = 3;
2765 break;
2766 case 22:
2767 tempheader.new_version_id_main = 2;
2768 tempheader.new_version_id_second = 50;
2769 tempheader.new_version_id_gamma = 4;
2770 break;
2771 case 23:
2772 tempheader.new_version_id_main = 2;
2773 tempheader.new_version_id_second = 50;
2774 tempheader.new_version_id_gamma = 5;
2775 break;
2776 case 24:
2777 13 tempheader.new_version_id_main = 2;
2778 13 tempheader.new_version_id_second = 50;
2779 13 tempheader.new_version_id_release = -1;
2780 13 break;
2781 case 25:
2782 tempheader.new_version_id_main = 2;
2783 tempheader.new_version_id_second = 50;
2784 tempheader.new_version_id_third = 1;
2785 tempheader.new_version_id_gamma = 1;
2786 break;
2787 case 26:
2788 tempheader.new_version_id_main = 2;
2789 tempheader.new_version_id_second = 50;
2790 tempheader.new_version_id_third = 1;
2791 tempheader.new_version_id_gamma = 2;
2792 break;
2793 case 27:
2794 tempheader.new_version_id_main = 2;
2795 tempheader.new_version_id_second = 50;
2796 tempheader.new_version_id_third = 1;
2797 tempheader.new_version_id_gamma = 3;
2798 break;
2799 case 28:
2800 5 tempheader.new_version_id_main = 2;
2801 5 tempheader.new_version_id_second = 50;
2802 5 tempheader.new_version_id_third = 1;
2803 5 tempheader.new_version_id_release = -1;
2804 5 break;
2805 case 29:
2806 23 tempheader.new_version_id_main = 2;
2807 23 tempheader.new_version_id_second = 50;
2808 23 tempheader.new_version_id_third = 2;
2809 23 tempheader.new_version_id_release = -1;
2810 23 break;
2811 case 30:
2812 tempheader.new_version_id_main = 2;
2813 tempheader.new_version_id_second = 50;
2814 tempheader.new_version_id_third = 3;
2815 tempheader.new_version_id_gamma = 1;
2816 break;
2817 case 31:
2818 10 tempheader.new_version_id_main = 2;
2819 10 tempheader.new_version_id_second = 53;
2820 10 tempheader.new_version_id_gamma = -1;
2821 10 break;
2822 case 32:
2823 8 tempheader.new_version_id_main = 2;
2824 8 tempheader.new_version_id_second = 53;
2825 8 tempheader.new_version_id_release = -1;
2826 8 break;
2827 case 33:
2828 tempheader.new_version_id_main = 2;
2829 tempheader.new_version_id_second = 53;
2830 tempheader.new_version_id_third = 1;
2831 break;
2832 }
2833 59 break;
2834
2835 case 0x211:
2836 tempheader.new_version_id_main = 2;
2837 tempheader.new_version_id_second = 11;
2838 tempheader.new_version_id_beta = tempheader.build;
2839 break;
2840 case 0x210:
2841 tempheader.new_version_id_main = 2;
2842 tempheader.new_version_id_second = 10;
2843 tempheader.new_version_id_beta = tempheader.build;
2844 break;
2845 }
2846 59 }
2847 }
2848
2/4
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 75 times.
75 if(printmetadata || __isZQuest)
2849 {
2850 print_quest_metadata(tempheader, loading_qst_name, loading_qst_num);
2851 }
2852 }
2853
2854 //{ Version Warning
2855 75 int32_t vercmp = tempheader.compareVer();
2856 75 int32_t astatecmp = compare(int32_t(tempheader.getAlphaState()), ALPHA_STATE);
2857 75 int32_t avercmp = compare(tempheader.getAlphaVer(), ALPHA_VER);
2858
4/6
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
✓ Branch 3 taken 59 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 16 times.
91 if(vercmp > 0 || (!vercmp &&
2859
2/4
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
✗ Branch 3 not taken.
16 (astatecmp > 0 || (!astatecmp &&
2860 16 avercmp > 0))))
2861 {
2862 bool r = true;
2863 if(loadquest_report)
2864 {
2865 enter_sys_pal();
2866 AlertDialog("Quest saved in newer version",
2867 "This quest was last saved in a newer version of ZQuest."
2868 " Attempting to load this quest may not work correctly; to"
2869 " avoid issues, try loading this quest in at least '" + std::string(tempheader.getVerStr()) + "'"
2870 "\n\nWould you like to continue loading anyway? (Not recommended)",
2871 [&](bool ret,bool)
2872 {
2873 r = ret;
2874 }).show();
2875 exit_sys_pal();
2876 }
2877 if(!r)
2878 return qe_silenterr;
2879 }
2880
1/2
✓ Branch 0 taken 75 times.
✗ Branch 1 not taken.
75 else if(tempheader.compareDate() > 0)
2881 {
2882 bool r = true;
2883 if(loadquest_report)
2884 {
2885 enter_sys_pal();
2886 AlertDialog("Quest saved in newer build",
2887 "This quest was last saved in a newer build of ZQuest, and may have"
2888 " issues loading in this build."
2889 "\n\nWould you like to continue loading anyway?",
2890 [&](bool ret,bool)
2891 {
2892 r = ret;
2893 }).show();
2894 exit_sys_pal();
2895 }
2896 if(!r)
2897 return qe_silenterr;
2898 }
2899 //}
2900
2901 75 read_ext_zinfo = tempheader.external_zinfo;
2902
2903
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 75 times.
75 if(keepdata==true)
2904 {
2905 75 memcpy(Header, &tempheader, sizeof(tempheader));
2906 75 map_count=temp_map_count;
2907 75 memcpy(midi_flags, temp_midi_flags, MIDIFLAGS_SIZE);
2908 75 }
2909
2910 75 return 0;
2911 75 }
2912
2913 63 int32_t readrules(PACKFILE *f, zquestheader *Header, bool keepdata)
2914 {
2915 int32_t dummy;
2916 zquestheader tempheader;
2917 63 word s_version=0;
2918 63 dword compatrule_version=0;
2919
2920 63 memcpy(&tempheader, Header, sizeof(tempheader));
2921
2922
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(tempheader.zelda_version >= 0x193)
2923 {
2924 //section version info
2925
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_version,f,true))
2926 {
2927 return qe_invalid;
2928 }
2929
2930 63 FFCore.quest_format[vRules] = s_version;
2931
2932
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&dummy,f,true))
2933 {
2934 return qe_invalid;
2935 }
2936
2937
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(s_version > 16)
2938 {
2939
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_igetl(&compatrule_version,f,true))
2940 {
2941 return qe_invalid;
2942 }
2943 4 }
2944 63 FFCore.quest_format[vCompatRule] = compatrule_version;
2945
2946 //section size
2947
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy,f,true))
2948 {
2949 return qe_invalid;
2950 }
2951
2952
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if ( s_version < 15 )
2953 {
2954 //finally... section data
2955
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(!pfread(quest_rules,QUESTRULES_SIZE,f,true))
2956 {
2957 return qe_invalid;
2958 }
2959 59 }
2960 else
2961 {
2962
2963
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if(!pfread(quest_rules,QUESTRULES_NEW_SIZE,f,true))
2964 {
2965 return qe_invalid;
2966 }
2967
2968 }
2969 63 }
2970
2971 //al_trace("Rules version %d\n", s_version);
2972 //{ bunch of compat stuff
2973 63 memcpy(deprecated_rules, quest_rules, QUESTRULES_NEW_SIZE);
2974
2975
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version<2)
2976 {
2977 set_bit(quest_rules,14,0);
2978 set_bit(quest_rules,27,0);
2979 set_bit(quest_rules,28,0);
2980 set_bit(quest_rules,29,0);
2981 set_bit(quest_rules,30,0);
2982 set_bit(quest_rules,32,0);
2983 set_bit(quest_rules,36,0);
2984 set_bit(quest_rules,49,0);
2985 set_bit(quest_rules,50,0);
2986 set_bit(quest_rules,51,0);
2987 set_bit(quest_rules,68,0);
2988 set_bit(quest_rules,75,0);
2989 set_bit(quest_rules,76,0);
2990 set_bit(quest_rules,98,0);
2991 set_bit(quest_rules,110,0);
2992 set_bit(quest_rules,113,0);
2993 set_bit(quest_rules,116,0);
2994 set_bit(quest_rules,102,0);
2995 set_bit(quest_rules,132,0);
2996 }
2997
2998 //Now, do any updates...
2999
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((tempheader.zelda_version < 0x211)||((tempheader.zelda_version == 0x211)&&(tempheader.build<18)))
3000 {
3001 set_bit(quest_rules, qr_SMOOTHVERTICALSCROLLING,1);
3002 set_bit(quest_rules, qr_REPLACEOPENDOORS, 1);
3003 set_bit(quest_rules, qr_OLDLENSORDER, 1);
3004 set_bit(quest_rules, qr_NOFAIRYGUYFIRES, 1);
3005 set_bit(quest_rules, qr_TRIGGERSREPEAT, 1);
3006 }
3007
3008
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((tempheader.zelda_version < 0x193)||((tempheader.zelda_version == 0x193)&&(tempheader.build<3)))
3009 {
3010 set_bit(quest_rules,qr_WALLFLIERS,1);
3011 }
3012
3013
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((tempheader.zelda_version < 0x193)||((tempheader.zelda_version == 0x193)&&(tempheader.build<4)))
3014 {
3015 set_bit(quest_rules,qr_NOBOMBPALFLASH,1);
3016 }
3017
3018
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((tempheader.zelda_version < 0x193)||((tempheader.zelda_version == 0x193)&&(tempheader.build<3)))
3019 {
3020 set_bit(quest_rules,qr_NOSCROLLCONTINUE,1);
3021 }
3022
3023
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(tempheader.zelda_version <= 0x210)
3024 {
3025 set_bit(quest_rules,qr_ARROWCLIP,1);
3026 }
3027
3028
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(tempheader.zelda_version == 0x210)
3029 {
3030 set_bit(quest_rules, qr_NOSCROLLCONTINUE, get_bit(quest_rules, qr_CMBCYCLELAYERS));
3031 set_bit(quest_rules, qr_CMBCYCLELAYERS, 0);
3032 set_bit(quest_rules, qr_CONT_SWORD_TRIGGERS, 1);
3033 }
3034
3035
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(tempheader.zelda_version <= 0x210)
3036 {
3037 set_bit(quest_rules,qr_OLDSTYLEWARP,1);
3038 set_bit(quest_rules,qr_210_WARPRETURN,1);
3039 }
3040
3041 //might not be correct
3042
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(tempheader.zelda_version < 0x210)
3043 {
3044 set_bit(deprecated_rules, qr_OLDTRIBBLES_DEP,1);
3045 set_bit(quest_rules, qr_OLDHOOKSHOTGRAB,1);
3046 }
3047
3048
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(tempheader.zelda_version < 0x211)
3049 {
3050 set_bit(quest_rules, qr_WRONG_BRANG_TRAIL_DIR,1);
3051 }
3052
3053
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
63 if(tempheader.zelda_version == 0x192 && tempheader.build == 163)
3054 {
3055 set_bit(quest_rules, qr_192b163_WARP,1);
3056 }
3057
3058
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(tempheader.zelda_version == 0x210)
3059 {
3060 set_bit(deprecated_rules, qr_OLDTRIBBLES_DEP, get_bit(quest_rules, qr_DMGCOMBOPRI));
3061 set_bit(quest_rules, qr_DMGCOMBOPRI, 0);
3062 }
3063
3064
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if(tempheader.zelda_version < 0x211 || (tempheader.zelda_version == 0x211 && tempheader.build<15))
3065 {
3066 set_bit(quest_rules, qr_OLDPICKUP,1);
3067 }
3068
3069
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if(tempheader.zelda_version < 0x211 || (tempheader.zelda_version == 0x211 && tempheader.build < 18))
3070 {
3071 set_bit(quest_rules,qr_NOSOLIDDAMAGECOMBOS, 1);
3072 set_bit(quest_rules, qr_ITEMPICKUPSETSBELOW, 1); // broke around build 400
3073 }
3074
3075
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(tempheader.zelda_version < 0x250) // version<0x250 checks for beta 18; build was set to 18 prematurely
3076 {
3077 set_bit(quest_rules,qr_HOOKSHOTDOWNBUG, 1);
3078 }
3079
3080
4/4
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 46 times.
✓ Branch 3 taken 13 times.
63 if(tempheader.zelda_version == 0x250 && tempheader.build == 24) // Annoying...
3081 {
3082 13 set_bit(quest_rules,qr_PEAHATCLOCKVULN, 1);
3083 13 }
3084
3085
4/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 59 times.
63 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build < 22)) //22 is 2.50.0 RC4. Gotta set the door repair QR... -Dimi
3086 {
3087 set_bit(quest_rules,qr_OLD_DOORREPAIR, 1);
3088 }
3089
3090
4/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 59 times.
63 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build < 20)) //20 is 2.50.0 RC1 and RC2 (cause it didn't get bumped). Okay I'm gonna be honest I have no idea if any 2.50 build was available before RC1, but gonna try and cover my ass here -Dimi
3091 {
3092 set_bit(quest_rules,qr_OLD_SECRETMONEY, 1);
3093 }
3094
3095
5/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 13 times.
✓ Branch 5 taken 46 times.
63 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build < 28)) //28 is 2.50.1 final. Potion bug might have been used, I dunno. -Dimi
3096 {
3097 13 set_bit(quest_rules,qr_OLD_POTION_OR_HC, 1);
3098 13 }
3099
3100
5/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 13 times.
✓ Branch 5 taken 46 times.
63 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build<28))
3101 {
3102 13 set_bit(quest_rules, qr_OFFSCREENWEAPONS, 1);
3103 13 }
3104
3105 //Bombchu fix.
3106
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(tempheader.zelda_version == 0x250)
3107 {
3108
2/2
✓ Branch 0 taken 46 times.
✓ Branch 1 taken 13 times.
59 if ( tempheader.build == 24 ) //2.50.0
3109 {
3110 13 set_bit(quest_rules, qr_BOMBCHUSUPERBOMB, 1);
3111 13 }
3112
2/2
✓ Branch 0 taken 54 times.
✓ Branch 1 taken 5 times.
59 if ( tempheader.build == 28 ) //2.50.1
3113 {
3114 5 set_bit(quest_rules, qr_BOMBCHUSUPERBOMB, 1);
3115 5 }
3116
2/2
✓ Branch 0 taken 36 times.
✓ Branch 1 taken 23 times.
59 if ( tempheader.build == 29 ) //2.50.2
3117 {
3118 23 set_bit(quest_rules, qr_BOMBCHUSUPERBOMB, 0);
3119 23 }
3120
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if ( tempheader.build == 30 ) //2.50.3RC1
3121 {
3122 set_bit(quest_rules, qr_BOMBCHUSUPERBOMB, 0);
3123 }
3124 59 }
3125
3126
5/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 18 times.
✓ Branch 5 taken 41 times.
63 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build<29))
3127 {
3128 // qr_OFFSETEWPNCOLLISIONFIX
3129 // All 'official' quests need this disabled.
3130 // All 2.10 and lower quests need this enabled to preseve compatability.
3131 // All 2.11 - 2.5.1 quests should have it set also, due to a bug in about half of all the betas.
3132
3133 //~Gleeok
3134 18 set_bit(quest_rules, qr_OFFSETEWPNCOLLISIONFIX, 1); //This has to be set!!!!
3135
3136 // Broke in build 695
3137
2/4
✓ Branch 0 taken 18 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 18 times.
18 if(tempheader.zelda_version>=0x211 && tempheader.build>=18)
3138 18 set_bit(quest_rules, qr_BROKENSTATUES, 1);
3139 18 }
3140
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if (tempheader.zelda_version <= 0x190)
3141 {
3142 set_bit(quest_rules, qr_COPIED_SWIM_SPRITES, 1);
3143 }
3144
6/10
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 4 times.
63 if ( (tempheader.zelda_version == 0x250 && tempheader.build < 33) || tempheader.zelda_version == 0x254 || tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x255 && tempheader.build < 50) )
3145 {
3146 59 set_bit(quest_rules, qr_OLD_SLASHNEXT_SECRETS, 1);
3147 59 }
3148
3149
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if ( (tempheader.zelda_version < 0x211) ) //2.10 water and ladder interaction
3150 {
3151 set_bit(quest_rules, qr_OLD_210_WATER, 1);
3152 }
3153
3154
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( (tempheader.zelda_version < 0x255 ) || (tempheader.zelda_version == 0x255 && tempheader.build < 51 ) ) //2.10 water and ladder interaction
3155 {
3156 59 set_bit(quest_rules,qr_STEP_IS_FLOAT,0);
3157 59 }
3158
3159
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if ( tempheader.zelda_version < 0x250 )
3160 {
3161 set_bit(quest_rules, qr_8WAY_SHOT_SFX, 1);
3162 }
3163
3164
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version < 3)
3165 {
3166 set_bit(quest_rules, qr_HOLDNOSTOPMUSIC, 1);
3167 set_bit(quest_rules, qr_CAVEEXITNOSTOPMUSIC, 1);
3168 }
3169
3170
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version<4)
3171 {
3172 set_bit(quest_rules,10,0);
3173 }
3174
3175
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version<5)
3176 {
3177 set_bit(quest_rules,27,0);
3178 }
3179
3180
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version<6)
3181 {
3182 set_bit(quest_rules,46,0);
3183 }
3184
3185
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version<7) // January 2008
3186 {
3187 set_bit(quest_rules,qr_HEARTSREQUIREDFIX,0);
3188 set_bit(quest_rules,qr_PUSHBLOCKCSETFIX,1);
3189 }
3190
3191
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version<8)
3192 {
3193 set_bit(quest_rules, 12, 0);
3194 }
3195 else
3196 {
3197 63 set_bit(deprecated_rules, 12, 0);
3198 }
3199
3200
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version<9) // October 2008
3201 {
3202 set_bit(quest_rules,qr_NOROPE2FLASH_DEP,0);
3203 set_bit(quest_rules,qr_NOBUBBLEFLASH_DEP,0);
3204 set_bit(quest_rules,qr_GHINI2BLINK_DEP,0);
3205 set_bit(quest_rules,qr_PHANTOMGHINI2_DEP,0);
3206 }
3207
3208
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version<10) // December 2008
3209 {
3210 set_bit(quest_rules,qr_NOCLOCKS_DEP,0);
3211 set_bit(quest_rules, qr_ALLOW10RUPEEDROPS_DEP,0);
3212 }
3213
3214
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version<11) // April 2009
3215 {
3216 set_bit(quest_rules,qr_SLOWENEMYANIM_DEP,0);
3217 }
3218
3219
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version<12) // December 2009
3220 {
3221 set_bit(quest_rules,qr_BRKBLSHLDS_DEP,0);
3222 set_bit(quest_rules, qr_OLDTRIBBLES_DEP,0);
3223 }
3224
3225 //if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build < 24))
3226
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version < 13)
3227 {
3228 set_bit(quest_rules,qr_SHOPCHEAT, 1);
3229 }
3230
3231 // Not entirely sure this is the best place for this...
3232 //2.50.2 bitmap offset fix
3233 63 memset(extra_rules, 0, EXTRARULES_SIZE);
3234
5/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 18 times.
✓ Branch 5 taken 41 times.
63 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build<29))
3235 {
3236 18 set_bit(extra_rules, er_BITMAPOFFSET, 1);
3237 18 set_bit(quest_rules, qr_BITMAPOFFSETFIX, 1);
3238 18 }
3239 //required because quest templates also used this bit, although
3240 //it never did anything, before. -Z
3241
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if ( tempheader.zelda_version == 0x250 )
3242 {
3243
5/6
✓ Branch 0 taken 36 times.
✓ Branch 1 taken 23 times.
✓ Branch 2 taken 36 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 26 times.
59 if( tempheader.build == 29 || tempheader.build == 30 || tempheader.build == 31 )
3244 {
3245 33 set_bit(extra_rules, er_BITMAPOFFSET, 0);
3246 33 set_bit(quest_rules, qr_BITMAPOFFSETFIX, 0);
3247 33 }
3248 59 }
3249
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if ( tempheader.zelda_version == 0x254 )
3250 {
3251 set_bit(extra_rules, er_BITMAPOFFSET, 0);
3252 set_bit(quest_rules, qr_BITMAPOFFSETFIX, 0);
3253 }
3254
3/4
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
63 if ( tempheader.zelda_version == 0x255 && tempheader.build < 42 ) //QR was added to 255 in this build.
3255 {
3256 set_bit(extra_rules, er_BITMAPOFFSET, 0);
3257 set_bit(quest_rules, qr_BITMAPOFFSETFIX, 0);
3258 }
3259 //optimise fast drawing for older versions.
3260
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 42) )
3261 {
3262 59 set_bit(quest_rules, qr_OLDSPRITEDRAWS, 1);
3263 59 }
3264 //Old eweapon->Parent (was added in 2.54, Alpha 19)
3265 //The change was made in build 43, but I'm setting this to < 42, because quests made in 42 would benefit from this change, and
3266 //older quests can set the rule by hand. We need a new qst.dat again.
3267
4/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✓ Branch 3 taken 59 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version == 0x254 || (tempheader.zelda_version == 0x255 && tempheader.build < 42) )
3268 {
3269 set_bit(quest_rules, qr_OLDEWPNPARENT, 1);
3270 }
3271
4/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✓ Branch 3 taken 59 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version == 0x254 || (tempheader.zelda_version == 0x255 && tempheader.build < 44) )
3272 {
3273 set_bit(quest_rules, qr_OLDCREATEBITMAP_ARGS, 1);
3274 }
3275
4/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✓ Branch 3 taken 59 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version == 0x254 || (tempheader.zelda_version == 0x255 && tempheader.build < 45) )
3276 {
3277 set_bit(quest_rules, qr_OLDQUESTMISC, 1);
3278 }
3279
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if ( tempheader.zelda_version < 0x254 )
3280 {
3281 59 set_bit(quest_rules, qr_OLDCREATEBITMAP_ARGS, 0);
3282 59 set_bit(quest_rules, qr_OLDEWPNPARENT, 0);
3283 59 set_bit(quest_rules, qr_OLDQUESTMISC, 0);
3284 59 }
3285
3286 //item scripts continue to run
3287
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 44) )
3288 {
3289 59 set_bit(quest_rules, qr_ITEMSCRIPTSKEEPRUNNING, 0);
3290 59 set_bit(quest_rules, qr_SCRIPTSRUNINHEROSTEPFORWARD, 0);
3291 59 set_bit(quest_rules, qr_FIXSCRIPTSDURINGSCROLLING, 0);
3292 59 set_bit(quest_rules, qr_SCRIPTDRAWSINWARPS, 0);
3293 59 set_bit(quest_rules, qr_DYINGENEMYESDONTHURTHERO, 0);
3294 59 set_bit(quest_rules, qr_OUTOFBOUNDSENEMIES, 0);
3295 59 set_bit(quest_rules, qr_SPRITEXY_IS_FLOAT, 0);
3296 59 }
3297
3298
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 46) )
3299 {
3300 59 set_bit(quest_rules, qr_CLEARINITDONSCRIPTCHANGE, 1);
3301 59 }
3302
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 46) )
3303 {
3304 59 set_bit(quest_rules, qr_TRACESCRIPTIDS, 0);
3305 59 set_bit(quest_rules, qr_SCRIPT_FRIENDLY_ENEMY_TYPES, 1);
3306 59 set_bit(quest_rules, qr_PARSER_BOOL_TRUE_DECIMAL, 1);
3307 59 set_bit(quest_rules,qr_PARSER_250DIVISION,1);
3308 59 set_bit(quest_rules,qr_PARSER_BOOL_TRUE_DECIMAL,1);
3309 59 set_bit(quest_rules,qr_PARSER_TRUE_INT_SIZE,0);
3310 59 set_bit(quest_rules,qr_PARSER_FORCE_INLINE,0);
3311 59 set_bit(quest_rules,qr_PARSER_BINARY_32BIT,0);
3312
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if ( get_bit(quest_rules, qr_SELECTAWPN) )
3313 {
3314 set_bit(quest_rules,qr_NO_L_R_BUTTON_INVENTORY_SWAP,1);
3315 //In < 2.55a27, if you had an A+B subscreen, L and R didn't shift through inventory.
3316 //Now they **do**, unless you disable that behaviour.
3317 //For the sake of compatibility, old quests with the A+B subscreen rule enabed
3318 //now enable the disable L/R item swap on load.
3319 }
3320
3321 59 }
3322
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 47) )
3323 {
3324 //Compatibility: Setting the hero's action to rafting was previously disallowed, though legal for scripts to attempt.
3325 59 set_bit(quest_rules, qr_DISALLOW_SETTING_RAFTING, 1);
3326 //Compatibility: The calculation for when to loop an animation did not factor in ASkipY correctly, resulting in
3327 //animations ending earlier than they should.
3328 59 set_bit(quest_rules, qr_BROKEN_ASKIP_Y_FRAMES, 1);
3329 //Enemies would ignore solidity on the top half of combos
3330 59 set_bit(quest_rules, qr_ENEMY_BROKEN_TOP_HALF_SOLIDITY, 1);
3331 //Ceiling collison was a bit wonky, including hitting your head before you are near the ceiling or clipping into it slightly.
3332 59 set_bit(quest_rules, qr_OLD_SIDEVIEW_CEILING_COLLISON, 1);
3333 //If an itemdata had a 'frames' of 0, items created of that data would ignore all changes to 'frames'
3334 59 set_bit(quest_rules, qr_0AFRAME_ITEMS_IGNORE_AFRAME_CHANGES, 1);
3335 //Collision used some odd calculations before, and enemies could not be hit back into the top row or left column
3336 59 set_bit(quest_rules, qr_OLD_ENEMY_KNOCKBACK_COLLISION, 1);
3337 59 }
3338
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if ( tempheader.zelda_version < 0x255 )
3339 {
3340 59 set_bit(quest_rules, qr_NOFFCWAITDRAW, 1);
3341 59 set_bit(quest_rules, qr_NOITEMWAITDRAW, 1);
3342 59 set_bit(quest_rules, qr_SETENEMYWEAPONSPRITESONWPNCHANGE, 1);
3343 59 set_bit(quest_rules, qr_OLD_INIT_SCRIPT_TIMING, 1);
3344 //set_bit(quest_rules, qr_DO_NOT_DEALLOCATE_INIT_AND_SAVELOAD_ARRAYS, 1);
3345 59 }
3346
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || ( tempheader.zelda_version == 0x255 && tempheader.build < 48 ) )
3347 {
3348 59 set_bit(quest_rules, qr_SETENEMYWEAPONSPRITESONWPNCHANGE, 1);
3349 59 }
3350
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if( tempheader.zelda_version < 0x255 || ( tempheader.zelda_version == 0x255 && tempheader.build < 52 ) )
3351 {
3352 59 set_bit(quest_rules, qr_OLD_PRINTF_ARGS, 1);
3353 59 }
3354
3355
3356
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 54) )
3357 {
3358 59 set_bit(quest_rules, qr_BROKEN_RING_POWER, 1);
3359 59 }
3360
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 56) )
3361 {
3362 59 set_bit(quest_rules, qr_NO_OVERWORLD_MAP_CHARTING, 1);
3363 59 }
3364
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 57) )
3365 {
3366 59 set_bit(quest_rules, qr_DUNGEONS_USE_CLASSIC_CHARTING, 1);
3367 59 }
3368
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 58) )
3369 {
3370 //Rule used to be 'qr_SETXYBUTTONITEMS', now split.
3371
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if(get_bit(quest_rules,qr_SET_XBUTTON_ITEMS))
3372 set_bit(quest_rules,qr_SET_YBUTTON_ITEMS,1);
3373 59 }
3374
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 59) )
3375 {
3376 59 set_bit(quest_rules,qr_ALLOW_EDITING_COMBO_0,1);
3377 59 }
3378
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 60) )
3379 {
3380 59 set_bit(quest_rules,qr_OLD_CHEST_COLLISION,1);
3381 59 }
3382
3383
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if ( tempheader.zelda_version < 0x254 )
3384 {
3385 59 set_bit(quest_rules, qr_250WRITEEDEFSCRIPT, 1);
3386 59 }
3387 //Sideview spikes in 2.50.0
3388
5/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 13 times.
✓ Branch 5 taken 46 times.
63 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build<27)) //2.50.1RC3
3389 {
3390 13 set_bit(quest_rules, qr_OLDSIDEVIEWSPIKES, 1);
3391 13 }
3392 //more 2.50 fixes -Z
3393
5/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 41 times.
✓ Branch 5 taken 18 times.
63 if(tempheader.zelda_version < 0x250 || (tempheader.zelda_version == 0x250 && tempheader.build<31))
3394 {
3395 41 set_bit(quest_rules, qr_MELEEMAGICCOST, 0);
3396 41 set_bit(quest_rules, qr_GANONINTRO, 0); //This will get flipped later on in the compatrule 11 check. That's why it's turning it off.
3397 41 set_bit(quest_rules, qr_OLDMIRRORCOMBOS, 1);
3398 41 set_bit(quest_rules, qr_BROKENBOOKCOST, 1);
3399 41 set_bit(quest_rules, qr_BROKENCHARINTDRAWING, 1);
3400
3401 41 }
3402
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
63 if(tempheader.zelda_version == 0x254 && tempheader.build<41)
3403 {
3404 //set_bit(quest_rules,qr_MELEEMAGICCOST, get_bit(extra_rules,er_MAGICCOSTSWORD));
3405 set_bit(quest_rules,qr_MELEEMAGICCOST, 1);
3406 }
3407
3408
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(tempheader.zelda_version < 0x193)
3409 {
3410 set_bit(quest_rules, qr_SHORTDGNWALK, 1);
3411 }
3412
3413
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(tempheader.zelda_version < 0x255)
3414 {
3415 59 set_bit(quest_rules, qr_OLDINFMAGIC, 1);
3416 59 }
3417
3418
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if((tempheader.zelda_version < 0x250)) //2.10 and earlier allowed the triforce to Warp Player out of Item Cellars in Dungeons. -Z (15th March, 2019 )
3419 {
3420 set_bit(quest_rules,qr_SIDEVIEWTRIFORCECELLAR,1);
3421 }
3422
3423
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 47) )
3424 {
3425 59 set_bit(quest_rules,qr_OLD_F6,1);
3426 59 }
3427
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 49) )
3428 {
3429 59 set_bit(quest_rules,qr_NO_OVERWRITING_HOPPING,1);
3430 59 }
3431
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 50) )
3432 {
3433 59 set_bit(quest_rules,qr_STRING_FRAME_OLD_WIDTH_HEIGHT,1);
3434 59 }
3435
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( tempheader.zelda_version < 0x255 || (tempheader.zelda_version == 0x255 && tempheader.build < 53) )
3436 {
3437 59 set_bit(quest_rules,qr_BROKEN_OVERWORLD_MINIMAP,1);
3438 59 }
3439 //}
3440
3441
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 1)
3442 {
3443 //Enemies->Secret only affects flag 16-31
3444 59 set_bit(quest_rules,qr_ENEMIES_SECRET_ONLY_16_31,1);
3445 59 }
3446
3447
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 2)
3448 {
3449 //Old CSet2 Handling
3450 59 set_bit(quest_rules,qr_OLDCS2,1);
3451 59 }
3452
3453
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 3)
3454 {
3455 //Hardcoded Shadow/Spawn/Death anim frames
3456 59 set_bit(quest_rules,qr_HARDCODED_ENEMY_ANIMS,1);
3457 59 }
3458
3459
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 4)
3460 {
3461 //Hardcoded Shadow/Spawn/Death anim frames
3462 59 set_bit(quest_rules,qr_OLD_ITEMDATA_SCRIPT_TIMING,1);
3463 59 }
3464
3465
3/4
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 59 times.
63 if(compatrule_version < 5 && tempheader.zelda_version >= 0x250)
3466 {
3467 //Hardcoded Shadow/Spawn/Death anim frames
3468 59 set_bit(quest_rules,qr_NO_LANMOLA_RINGLEADER,1);
3469 59 }
3470
3471
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 6)
3472 {
3473 //Step->Secret (Temp) only affects flag 16-31
3474 59 set_bit(quest_rules,qr_STEPTEMP_SECRET_ONLY_16_31,1);
3475 59 }
3476
3477
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 7)
3478 {
3479 //'Hit All Triggers->Perm Secret' doesn't trigger temp secrets
3480 59 set_bit(quest_rules,qr_ALLTRIG_PERMSEC_NO_TEMP,1);
3481 59 }
3482
3483
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 8)
3484 {
3485 //Hardcoded LItem/Bomb/Clock/Magic Tile Mods
3486 59 set_bit(quest_rules,qr_HARDCODED_LITEM_LTMS,1);
3487 59 }
3488
3489
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 9)
3490 {
3491 //Hardcoded BS Patras
3492 59 set_bit(quest_rules,qr_HARDCODED_BS_PATRA,1);
3493 //Hardcoded Patra Inner Eye offsets
3494 59 set_bit(quest_rules,qr_PATRAS_USE_HARDCODED_OFFSETS,1);
3495 //Broken 'Big enemy' animation style
3496 59 set_bit(quest_rules,qr_BROKEN_BIG_ENEMY_ANIMATION,1);
3497 //Broken Attribute 31/32
3498 59 set_bit(quest_rules,qr_BROKEN_ATTRIBUTE_31_32,1);
3499 59 }
3500
3501
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 10)
3502 {
3503 //Shared candle use limits
3504 59 set_bit(quest_rules,qr_CANDLES_SHARED_LIMIT,1);
3505 59 }
3506
3507
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 11)
3508 {
3509 //No cross-screen return points
3510 59 set_bit(quest_rules,qr_OLD_RESPAWN_POINTS,1);
3511 59 }
3512
3513
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 12)
3514 {
3515 //Old fire trail duration
3516 59 set_bit(quest_rules,qr_OLD_FLAMETRAIL_DURATION,1);
3517 //Old Intro String in Ganon Room Behavior
3518
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(get_bit(quest_rules,qr_GANONINTRO)) set_bit(quest_rules,qr_GANONINTRO,0);
3519 59 else set_bit(quest_rules,qr_GANONINTRO,1);
3520 59 }
3521
3522
3/4
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 59 times.
✗ Branch 3 not taken.
63 if(compatrule_version < 13 && tempheader.zelda_version >= 0x255)
3523 {
3524 //ANone doesn't reset to originaltile
3525 set_bit(quest_rules,qr_ANONE_NOANIM,1);
3526 }
3527
3528
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 14)
3529 {
3530 //Old Bridge Combo Behavior
3531 59 set_bit(quest_rules,qr_OLD_BRIDGE_COMBOS,1);
3532 59 }
3533
3534
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 15)
3535 {
3536 //Broken Z3 Animation
3537 59 set_bit(quest_rules,qr_BROKEN_Z3_ANIMATION,1);
3538 59 }
3539
3540
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 16)
3541 {
3542 //Old Enemy Tile Behavior with Animation (None) Enemies
3543 59 set_bit(quest_rules,qr_OLD_TILE_INITIALIZATION,1);
3544 59 }
3545
3546
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 17)
3547 {
3548 //Old Quake/DrawYOffset behavior
3549 //set_bit(quest_rules,qr_OLD_DRAWOFFSET,1);
3550 //I'm leaving this commented cause I doubt it'll break anything and I think the bugfix might be appreciated in older versions.
3551 //On the offchance that it *does* break old quests, fixing it is as simple as uncommenting the set_bit above.
3552 59 }
3553
3554
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 18)
3555 {
3556 //Broken DrawScreen Derivative Functions
3557 59 set_bit(quest_rules,qr_BROKEN_DRAWSCREEN_FUNCTIONS,1);
3558 //Scrolling Cancels Charge
3559 59 set_bit(quest_rules,qr_SCROLLING_KILLS_CHARGE,1);
3560 59 }
3561
3562
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 19)
3563 {
3564 //Broken Enemy Item Carrying with Large Enemies
3565 59 set_bit(quest_rules,qr_BROKEN_ITEM_CARRYING,1);
3566 59 }
3567
3568
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 20)
3569 {
3570 59 set_bit(quest_rules,qr_CUSTOMWEAPON_IGNORE_COST,1);
3571 59 }
3572
3573
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 21)
3574 {
3575 59 set_bit(quest_rules,qr_LEEVERS_DONT_OBEY_STUN,1);
3576 59 set_bit(quest_rules,qr_GANON_CANT_SPAWN_ON_CONTINUE,1);
3577 59 set_bit(quest_rules,qr_WIZZROBES_DONT_OBEY_STUN,1);
3578 59 set_bit(quest_rules,qr_OLD_BUG_NET,1);
3579 59 set_bit(quest_rules,qr_MANHANDLA_BLOCK_SFX,1);
3580 59 }
3581
3582
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 22)
3583 {
3584 59 set_bit(quest_rules,qr_BROKEN_KEEPOLD_FLAG,1);
3585 59 }
3586
3587
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 23)
3588 {
3589 59 set_bit(quest_rules,qr_OLD_HALF_MAGIC,1);
3590 59 }
3591
3592
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 24)
3593 {
3594 59 set_bit(quest_rules,qr_WARPS_RESTART_DMAPSCRIPT,1);
3595 59 set_bit(quest_rules,qr_DMAP_0_CONTINUE_BUG,1);
3596 59 }
3597
3598
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 25)
3599 {
3600
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if (get_bit(quest_rules, qr_OLD_FAIRY_LIMIT)) set_bit(quest_rules,qr_OLD_FAIRY_LIMIT,0);
3601 59 else set_bit(quest_rules,qr_OLD_FAIRY_LIMIT,1);
3602 59 set_bit(quest_rules,qr_OLD_SCRIPTED_KNOCKBACK,1);
3603 59 }
3604
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 26)
3605 {
3606 59 set_bit(quest_rules,qr_OLD_KEESE_Z_AXIS,1);
3607 59 set_bit(quest_rules,qr_POLVIRE_NO_SHADOW,1);
3608 59 set_bit(quest_rules,qr_SUBSCR_OLD_SELECTOR,1);
3609 59 }
3610
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(compatrule_version < 27) //Noticed some junk data in the QR array...
3611 {
3612
2/2
✓ Branch 0 taken 17759 times.
✓ Branch 1 taken 59 times.
17818 for(auto q = qr_POLVIRE_NO_SHADOW+1; q < qr_PARSER_250DIVISION; ++q)
3613 17759 set_bit(quest_rules,q,0);
3614
2/2
✓ Branch 0 taken 6608 times.
✓ Branch 1 taken 59 times.
6667 for(auto q = qr_COMBODATA_INITD_MULT_TENK+1; q < QUESTRULES_NEW_SIZE*8; ++q)
3615 6608 set_bit(quest_rules,q,0);
3616 //This should nuke any remaining junk data... not sure if it affected anything previous. -Em
3617 59 }
3618
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 60 times.
63 if(compatrule_version < 28)
3619 {
3620 60 set_bit(quest_rules,qr_SUBSCR_BACKWARDS_ID_ORDER,1);
3621 60 }
3622
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 60 times.
63 if(compatrule_version < 29)
3623 {
3624 60 set_bit(quest_rules,qr_OLD_LOCKBLOCK_COLLISION,1);
3625 60 }
3626
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 60 times.
63 if(compatrule_version < 30)
3627 {
3628 60 set_bit(quest_rules,qr_DECO_2_YOFFSET,1);
3629 60 set_bit(quest_rules,qr_SCREENSTATE_80s_BUG,1);
3630 60 }
3631
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 60 times.
63 if(compatrule_version < 31)
3632 {
3633 60 set_bit(quest_rules,qr_GOHMA_UNDAMAGED_BUG,1);
3634 60 set_bit(quest_rules,qr_FFCPRELOAD_BUGGED_LOAD,1);
3635 60 }
3636
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 60 times.
63 if(compatrule_version < 32)
3637 {
3638 60 set_bit(quest_rules,qr_BROKEN_GETPIXEL_VALUE,1);
3639 60 }
3640
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 60 times.
63 if(compatrule_version < 33)
3641 {
3642 60 set_bit(quest_rules,qr_NO_LIFT_SPRITE,1);
3643 60 }
3644
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 62 times.
63 if(compatrule_version < 34)
3645 {
3646 62 set_bit(quest_rules,qr_OLD_SIDEVIEW_LANDING_CODE,1);
3647 62 set_bit(quest_rules,qr_OLD_FFC_SPEED_CAP,1);
3648 62 set_bit(quest_rules,qr_OLD_FFC_FUNCTIONALITY,1);
3649 62 set_bit(quest_rules,qr_OLD_WIZZROBE_SUBMERGING,1);
3650 62 }
3651
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(compatrule_version < 35)
3652 {
3653 // Leaving this commented for now, might need to enable later -Em
3654 // set_bit(quest_rules,qr_ZS_NO_NEG_ARRAY,1);
3655 63 }
3656
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(compatrule_version < 36)
3657 {
3658 63 set_bit(quest_rules,qr_OLD_SHALLOW_SFX,1);
3659 63 }
3660
3661 //always set
3662 63 set_bit(quest_rules,qr_ANIMATECUSTOMWEAPONS,0);
3663
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if (s_version < 16) set_bit(quest_rules,qr_BROKEN_HORIZONTAL_WEAPON_ANIM,1);
3664
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true)
3665 {
3666 63 memcpy(Header, &tempheader, sizeof(tempheader));
3667 63 }
3668 63 return 0;
3669 63 }
3670
3671 519461 void init_msgstr(MsgStr *str)
3672 {
3673 519461 str->s = "";
3674 519461 str->s.shrink_to_fit();
3675 519461 str->nextstring=0;
3676 519461 str->tile=0;
3677 519461 str->cset=0;
3678 519461 str->trans=false;
3679 519461 str->font=font_zfont;
3680 519461 str->y=32;
3681 519461 str->sfx=18;
3682 519461 str->listpos=0;
3683 519461 str->x=24;
3684 519461 str->w=get_bit(quest_rules,qr_STRING_FRAME_OLD_WIDTH_HEIGHT)!=0 ? 24*8 : 26*8;
3685 519461 str->h=get_bit(quest_rules,qr_STRING_FRAME_OLD_WIDTH_HEIGHT)!=0 ? 3*8 : 5*8;
3686 519461 str->hspace=0;
3687 519461 str->vspace=0;
3688 519461 str->stringflags=0;
3689 519461 str->margins[up] = 8;
3690 519461 str->margins[down] = 0;
3691 519461 str->margins[left] = 8;
3692 519461 str->margins[right] = 0;
3693 519461 str->portrait_tile = 0;
3694 519461 str->portrait_cset = 0;
3695 519461 str->portrait_x = 0;
3696 519461 str->portrait_y = 0;
3697 519461 str->portrait_tw = 1;
3698 519461 str->portrait_th = 1;
3699 519461 str->shadow_type = 0;
3700 519461 str->shadow_color = 0;
3701 519461 str->drawlayer = 6;
3702 519461 }
3703
3704 63 void init_msgstrings(int32_t start, int32_t end)
3705 {
3706
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(end <= start || end-start > msg_strings_size)
3707 return;
3708
3709
2/2
✓ Branch 0 taken 516096 times.
✓ Branch 1 taken 63 times.
516159 for(int32_t i=start; i<end; i++)
3710 {
3711 516096 init_msgstr(&MsgStrings[i]);
3712 516096 MsgStrings[i].listpos=i;
3713 516096 }
3714
3715
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(start==0)
3716 {
3717 63 MsgStrings[0].s = "(None)";
3718 63 MsgStrings[0].listpos = 0;
3719 63 }
3720 63 }
3721
3722 63 int32_t readstrings(PACKFILE *f, zquestheader *Header, bool keepdata)
3723 {
3724 63 MsgStr tempMsgString;
3725
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 init_msgstr(&tempMsgString);
3726
3727 63 word temp_msg_count=0;
3728 word temp_expansion[16];
3729 63 memset(temp_expansion, 0, 16*sizeof(word));
3730 63 char buf[8193] = {0};
3731
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(Header->zelda_version < 0x193)
3732 {
3733 byte tempbyte;
3734 int32_t strings_to_read=0;
3735 set_bit(quest_rules,qr_OLD_STRING_EDITOR_MARGINS,true);
3736 if((Header->zelda_version < 0x192)||
3737 ((Header->zelda_version == 0x192)&&(Header->build<31)))
3738 {
3739 strings_to_read=128;
3740 temp_msg_count=Header->old_str_count;
3741
3742 // Some sort of string count corruption seems to be common in old quests
3743 if(temp_msg_count>128)
3744 {
3745 temp_msg_count=128;
3746 }
3747 }
3748 else if((Header->zelda_version == 0x192)&&(Header->build<140))
3749 {
3750 strings_to_read=255;
3751 temp_msg_count=Header->old_str_count;
3752 }
3753 else
3754 {
3755 if(!p_igetw(&temp_msg_count,f,true))
3756 {
3757 return qe_invalid;
3758 }
3759
3760 strings_to_read=temp_msg_count;
3761
3762 if(temp_msg_count >= msg_strings_size)
3763 {
3764 Z_message("Reallocating string buffer...\n");
3765
3766 // if((MsgStrings=(MsgStr*)_al_sane_realloc(MsgStrings,sizeof(MsgStr)*MAXMSGS))==NULL)
3767 // return qe_nomem;
3768
3769 //memset(MsgStrings, 0, sizeof(MsgStr)*MAXMSGS);
3770 delete[] MsgStrings;
3771 MsgStrings = new MsgStr[MAXMSGS];
3772 msg_strings_size = MAXMSGS;
3773 for(auto q = 0; q < msg_strings_size; ++q)
3774 {
3775 MsgStrings[q].clear();
3776 }
3777 }
3778 }
3779
3780 //reset the message strings
3781 if(keepdata)
3782 {
3783 init_msgstrings(0,msg_strings_size);
3784 }
3785
3786 for(int32_t x=0; x<strings_to_read; x++)
3787 {
3788 init_msgstr(&tempMsgString);
3789
3790 if(!pfread(buf,73,f,true))
3791 {
3792 return qe_invalid;
3793 }
3794
3795 buf[74] = '\0';
3796 tempMsgString.s = buf;
3797
3798 if(!p_getc(&tempbyte,f,true))
3799 {
3800 return qe_invalid;
3801 }
3802
3803 if((Header->zelda_version < 0x192)||
3804 ((Header->zelda_version == 0x192)&&(Header->build<148)))
3805 {
3806 tempMsgString.nextstring=tempbyte?x+1:0;
3807
3808 if(!p_getc(&tempbyte,f,true))
3809 {
3810 return qe_invalid;
3811 }
3812
3813 if(!p_getc(&tempbyte,f,true))
3814 {
3815 return qe_invalid;
3816 }
3817 }
3818 else
3819 {
3820 if(!p_igetw(&tempMsgString.nextstring,f,true))
3821 {
3822 return qe_invalid;
3823 }
3824
3825 if(!pfread(temp_expansion,32,f,true))
3826 {
3827 return qe_invalid;
3828 }
3829 }
3830
3831 if(keepdata==true)
3832 {
3833 MsgStrings[x] = tempMsgString;
3834 }
3835 }
3836 }
3837 else
3838 {
3839 int32_t dummy_int;
3840 word s_version;
3841 word s_cversion;
3842
3843 //section version info
3844
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&s_version,f,true))
3845 {
3846 return qe_invalid;
3847 }
3848
3849 63 FFCore.quest_format[vStrings] = s_version;
3850
3851
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&s_cversion,f,true))
3852 {
3853 return qe_invalid;
3854 }
3855
3856 //al_trace("Strings version %d\n", s_version);
3857 //section size
3858
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetl(&dummy_int,f,true))
3859 {
3860 return qe_invalid;
3861 }
3862
3863 //finally... section data
3864
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_msg_count,f,true))
3865 {
3866 return qe_invalid;
3867 }
3868
3869
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(temp_msg_count >= msg_strings_size)
3870 {
3871 Z_message("Reallocating string buffer...\n");
3872
3873 // if((MsgStrings=(MsgStr*)_al_sane_realloc(MsgStrings,sizeof(MsgStr)*MAXMSGS))==NULL)
3874 // return qe_nomem;
3875 delete[] MsgStrings;
3876 MsgStrings = new MsgStr[MAXMSGS];
3877 msg_strings_size = MAXMSGS;
3878 for(auto q = 0; q < msg_strings_size; ++q)
3879 {
3880 MsgStrings[q].clear();
3881 }
3882 //memset(MsgStrings, 0, sizeof(MsgStr)*MAXMSGS);
3883 }
3884
3885 //reset the message strings
3886
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(keepdata)
3887 {
3888
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(s_version < 7)
3889
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 set_bit(quest_rules,qr_OLD_STRING_EDITOR_MARGINS,true);
3890
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 init_msgstrings(0,msg_strings_size);
3891 63 }
3892
3893 63 int32_t string_length=(s_version<2)?73:145;
3894
3895
2/2
✓ Branch 0 taken 3302 times.
✓ Branch 1 taken 63 times.
3365 for(int32_t i=0; i<temp_msg_count; i++)
3896 {
3897
1/2
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
3302 init_msgstr(&tempMsgString);
3898
2/2
✓ Branch 0 taken 81 times.
✓ Branch 1 taken 3221 times.
3302 if(s_version > 8)
3899 {
3900
2/4
✓ Branch 0 taken 81 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 81 times.
✗ Branch 3 not taken.
81 if(!p_igetl(&string_length,f,true))
3901 {
3902 return qe_invalid;
3903 }
3904 81 }
3905
1/2
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
3302 if (string_length > 0)
3906 {
3907
2/4
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3302 times.
✗ Branch 3 not taken.
3302 if (!pfread(buf, string_length, f, true))
3908 {
3909 return qe_invalid;
3910 }
3911 3302 }
3912 else
3913 {
3914 buf[0] = 0;
3915 }
3916
3917
2/4
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3302 times.
✗ Branch 3 not taken.
3302 if(!p_igetw(&tempMsgString.nextstring,f,true))
3918 {
3919 return qe_invalid;
3920 }
3921
3922
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3302 times.
3302 if(s_version<2)
3923 {
3924 buf[72] = '\0';
3925 tempMsgString.s = buf;
3926 }
3927 else
3928 {
3929 // June 2008: A bug corrupted the last 4 chars of a string.
3930 // Discard these.
3931
1/2
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
3302 if(s_version<3)
3932 {
3933 for(int32_t j=140; j<144; j++)
3934 {
3935 buf[j] = '\0';
3936 }
3937 }
3938
1/2
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
3302 if(string_length > 8192) string_length = 8192;
3939 3302 buf[string_length]='\0'; //Force-terminate
3940
1/2
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
3302 tempMsgString.s = buf;
3941
3942
2/2
✓ Branch 0 taken 81 times.
✓ Branch 1 taken 3221 times.
3302 if ( s_version >= 6 )
3943 {
3944
2/4
✓ Branch 0 taken 81 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 81 times.
✗ Branch 3 not taken.
81 if(!p_igetl(&tempMsgString.tile,f,true))
3945 {
3946 return qe_invalid;
3947 }
3948 81 }
3949 else
3950 {
3951
2/4
✓ Branch 0 taken 3221 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3221 times.
✗ Branch 3 not taken.
3221 if(!p_igetw(&tempMsgString.tile,f,true))
3952 {
3953 return qe_invalid;
3954 }
3955 }
3956
3957
2/4
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3302 times.
✗ Branch 3 not taken.
3302 if(!p_getc(&tempMsgString.cset,f,true))
3958 {
3959 return qe_invalid;
3960 }
3961
3962 byte dummy_char;
3963
3964
2/4
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3302 times.
✗ Branch 3 not taken.
3302 if(!p_getc(&dummy_char,f,true)) // trans is stored as a char...
3965 {
3966 return qe_invalid;
3967 }
3968
3969 3302 tempMsgString.trans=dummy_char!=0;
3970
3971
2/4
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3302 times.
✗ Branch 3 not taken.
3302 if(!p_getc(&tempMsgString.font,f,true))
3972 {
3973 return qe_invalid;
3974 }
3975
3976
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3302 times.
3302 if(s_version < 5)
3977 {
3978 if(!p_getc(&tempMsgString.y,f,true))
3979 {
3980 return qe_invalid;
3981 }
3982 }
3983 else
3984 {
3985
2/4
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3302 times.
✗ Branch 3 not taken.
3302 if(!p_igetw(&tempMsgString.x,f,true))
3986 {
3987 return qe_invalid;
3988 }
3989
3990
2/4
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3302 times.
✗ Branch 3 not taken.
3302 if(!p_igetw(&tempMsgString.y,f,true))
3991 {
3992 return qe_invalid;
3993 }
3994
3995
2/4
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3302 times.
✗ Branch 3 not taken.
3302 if(!p_igetw(&tempMsgString.w,f,true))
3996 {
3997 return qe_invalid;
3998 }
3999
4000
2/4
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3302 times.
✗ Branch 3 not taken.
3302 if(!p_igetw(&tempMsgString.h,f,true))
4001 {
4002 return qe_invalid;
4003 }
4004
4005
2/4
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3302 times.
✗ Branch 3 not taken.
3302 if(!p_getc(&tempMsgString.hspace,f,true))
4006 {
4007 return qe_invalid;
4008 }
4009
4010
2/4
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3302 times.
✗ Branch 3 not taken.
3302 if(!p_getc(&tempMsgString.vspace,f,true))
4011 {
4012 return qe_invalid;
4013 }
4014
4015
2/4
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3302 times.
✗ Branch 3 not taken.
3302 if(!p_getc(&tempMsgString.stringflags,f,true))
4016 {
4017 return qe_invalid;
4018 }
4019 }
4020
4021
2/2
✓ Branch 0 taken 3221 times.
✓ Branch 1 taken 81 times.
3302 if(s_version >= 7)
4022 {
4023
2/2
✓ Branch 0 taken 81 times.
✓ Branch 1 taken 324 times.
405 for(int32_t q = 0; q < 4; ++q)
4024 {
4025
2/4
✓ Branch 0 taken 324 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 324 times.
✗ Branch 3 not taken.
324 if(!p_getc(&tempMsgString.margins[q],f,true))
4026 {
4027 return qe_invalid;
4028 }
4029 324 }
4030
4031
2/4
✓ Branch 0 taken 81 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 81 times.
✗ Branch 3 not taken.
81 if(!p_igetl(&tempMsgString.portrait_tile,f,true))
4032 {
4033 return qe_invalid;
4034 }
4035
4036
2/4
✓ Branch 0 taken 81 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 81 times.
✗ Branch 3 not taken.
81 if(!p_getc(&tempMsgString.portrait_cset,f,true))
4037 {
4038 return qe_invalid;
4039 }
4040
4041
2/4
✓ Branch 0 taken 81 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 81 times.
✗ Branch 3 not taken.
81 if(!p_getc(&tempMsgString.portrait_x,f,true))
4042 {
4043 return qe_invalid;
4044 }
4045
4046
2/4
✓ Branch 0 taken 81 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 81 times.
✗ Branch 3 not taken.
81 if(!p_getc(&tempMsgString.portrait_y,f,true))
4047 {
4048 return qe_invalid;
4049 }
4050
4051
2/4
✓ Branch 0 taken 81 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 81 times.
✗ Branch 3 not taken.
81 if(!p_getc(&tempMsgString.portrait_tw,f,true))
4052 {
4053 return qe_invalid;
4054 }
4055
4056
2/4
✓ Branch 0 taken 81 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 81 times.
✗ Branch 3 not taken.
81 if(!p_getc(&tempMsgString.portrait_th,f,true))
4057 {
4058 return qe_invalid;
4059 }
4060 81 }
4061
4062
2/2
✓ Branch 0 taken 81 times.
✓ Branch 1 taken 3221 times.
3302 if(s_version >= 8)
4063 {
4064
2/4
✓ Branch 0 taken 81 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 81 times.
✗ Branch 3 not taken.
81 if(!p_getc(&tempMsgString.shadow_type,f,true))
4065 {
4066 return qe_invalid;
4067 }
4068
4069
2/4
✓ Branch 0 taken 81 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 81 times.
✗ Branch 3 not taken.
81 if(!p_getc(&tempMsgString.shadow_color,f,true))
4070 {
4071 return qe_invalid;
4072 }
4073 81 }
4074
4075
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 3296 times.
3302 if(s_version >= 10)
4076 {
4077
2/4
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
6 if(!p_getc(&tempMsgString.drawlayer,f,true))
4078 {
4079 return qe_invalid;
4080 }
4081 6 }
4082
4083
2/4
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3302 times.
✗ Branch 3 not taken.
3302 if(!p_getc(&tempMsgString.sfx,f,true))
4084 {
4085 return qe_invalid;
4086 }
4087
4088
1/2
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
3302 if(s_version>3)
4089 {
4090
2/4
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3302 times.
✗ Branch 3 not taken.
3302 if(!p_igetw(&tempMsgString.listpos,f,true))
4091 {
4092 return qe_invalid;
4093 }
4094 3302 }
4095 }
4096
4097
1/2
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
3302 if(keepdata==true)
4098 {
4099
1/2
✓ Branch 0 taken 3302 times.
✗ Branch 1 not taken.
3302 MsgStrings[i].copyAll(tempMsgString);
4100 3302 }
4101 3302 }
4102 }
4103
4104
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true)
4105 {
4106 63 msg_count=temp_msg_count;
4107 63 }
4108
4109 63 return 0;
4110 63 }
4111
4112 63 int32_t readdoorcombosets(PACKFILE *f, zquestheader *Header, bool keepdata)
4113 {
4114
1/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
63 if((Header->zelda_version < 0x192)||
4115
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ((Header->zelda_version == 0x192)&&(Header->build<158)))
4116 {
4117 return 0;
4118 }
4119
4120 63 word temp_door_combo_set_count=0;
4121 DoorComboSet tempDoorComboSet;
4122 word dummy_word;
4123 int32_t dummy_long;
4124 byte padding;
4125 63 int32_t s_version = 0;
4126
4127
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true)
4128 {
4129
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<MAXDOORCOMBOSETS; i++)
4130 {
4131 16128 memset(DoorComboSets+i, 0, sizeof(DoorComboSet));
4132 16128 }
4133 63 }
4134
4135
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(Header->zelda_version > 0x192)
4136 {
4137 //section version info
4138
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_version,f,true))
4139 {
4140 return qe_invalid;
4141 }
4142
4143 63 FFCore.quest_format[vDoors] = s_version;
4144
4145 //al_trace("Door combo sets version %d\n", dummy_word);
4146
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&dummy_word,f,true))
4147 {
4148 return qe_invalid;
4149 }
4150
4151 //section size
4152
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy_long,f,true))
4153 {
4154 return qe_invalid;
4155 }
4156 63 }
4157
4158 //finally... section data
4159
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&temp_door_combo_set_count,f,true))
4160 {
4161 return qe_invalid;
4162 }
4163
4164
2/2
✓ Branch 0 taken 441 times.
✓ Branch 1 taken 63 times.
504 for(int32_t i=0; i<temp_door_combo_set_count; i++)
4165 {
4166 441 memset(&tempDoorComboSet, 0, sizeof(DoorComboSet));
4167
4168 //name
4169
1/2
✓ Branch 0 taken 441 times.
✗ Branch 1 not taken.
441 if(!pfread(&tempDoorComboSet.name,sizeof(tempDoorComboSet.name),f,true))
4170 {
4171 return qe_invalid;
4172 }
4173
4174
1/2
✓ Branch 0 taken 441 times.
✗ Branch 1 not taken.
441 if(Header->zelda_version < 0x193)
4175 {
4176 if(!p_getc(&padding,f,true))
4177 {
4178 return qe_invalid;
4179 }
4180 }
4181
4182 //up door
4183
2/2
✓ Branch 0 taken 3969 times.
✓ Branch 1 taken 441 times.
4410 for(int32_t j=0; j<9; j++)
4184 {
4185
2/2
✓ Branch 0 taken 15876 times.
✓ Branch 1 taken 3969 times.
19845 for(int32_t k=0; k<4; k++)
4186 {
4187
1/2
✓ Branch 0 taken 15876 times.
✗ Branch 1 not taken.
15876 if(!p_igetw(&tempDoorComboSet.doorcombo_u[j][k],f,true))
4188 {
4189 return qe_invalid;
4190 }
4191 15876 }
4192 3969 }
4193
4194
2/2
✓ Branch 0 taken 3969 times.
✓ Branch 1 taken 441 times.
4410 for(int32_t j=0; j<9; j++)
4195 {
4196
2/2
✓ Branch 0 taken 15876 times.
✓ Branch 1 taken 3969 times.
19845 for(int32_t k=0; k<4; k++)
4197 {
4198
1/2
✓ Branch 0 taken 15876 times.
✗ Branch 1 not taken.
15876 if(!p_getc(&tempDoorComboSet.doorcset_u[j][k],f,true))
4199 {
4200 return qe_invalid;
4201 }
4202 15876 }
4203 3969 }
4204
4205 //down door
4206
2/2
✓ Branch 0 taken 3969 times.
✓ Branch 1 taken 441 times.
4410 for(int32_t j=0; j<9; j++)
4207 {
4208
2/2
✓ Branch 0 taken 15876 times.
✓ Branch 1 taken 3969 times.
19845 for(int32_t k=0; k<4; k++)
4209 {
4210
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15876 times.
15876 if(!p_igetw(&tempDoorComboSet.doorcombo_d[j][k],f,true))
4211 {
4212 return qe_invalid;
4213 }
4214 15876 }
4215 3969 }
4216
4217
2/2
✓ Branch 0 taken 3969 times.
✓ Branch 1 taken 441 times.
4410 for(int32_t j=0; j<9; j++)
4218 {
4219
2/2
✓ Branch 0 taken 15876 times.
✓ Branch 1 taken 3969 times.
19845 for(int32_t k=0; k<4; k++)
4220 {
4221
1/2
✓ Branch 0 taken 15876 times.
✗ Branch 1 not taken.
15876 if(!p_getc(&tempDoorComboSet.doorcset_d[j][k],f,true))
4222 {
4223 return qe_invalid;
4224 }
4225 15876 }
4226 3969 }
4227
4228 //left door
4229
2/2
✓ Branch 0 taken 3969 times.
✓ Branch 1 taken 441 times.
4410 for(int32_t j=0; j<9; j++)
4230 {
4231
2/2
✓ Branch 0 taken 23814 times.
✓ Branch 1 taken 3969 times.
27783 for(int32_t k=0; k<6; k++)
4232 {
4233
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 23814 times.
23814 if(!p_igetw(&tempDoorComboSet.doorcombo_l[j][k],f,true))
4234 {
4235 return qe_invalid;
4236 }
4237 23814 }
4238 3969 }
4239
4240
2/2
✓ Branch 0 taken 3969 times.
✓ Branch 1 taken 441 times.
4410 for(int32_t j=0; j<9; j++)
4241 {
4242
2/2
✓ Branch 0 taken 23814 times.
✓ Branch 1 taken 3969 times.
27783 for(int32_t k=0; k<6; k++)
4243 {
4244
1/2
✓ Branch 0 taken 23814 times.
✗ Branch 1 not taken.
23814 if(!p_getc(&tempDoorComboSet.doorcset_l[j][k],f,true))
4245 {
4246 return qe_invalid;
4247 }
4248 23814 }
4249 3969 }
4250
4251 //right door
4252
2/2
✓ Branch 0 taken 3969 times.
✓ Branch 1 taken 441 times.
4410 for(int32_t j=0; j<9; j++)
4253 {
4254
2/2
✓ Branch 0 taken 23814 times.
✓ Branch 1 taken 3969 times.
27783 for(int32_t k=0; k<6; k++)
4255 {
4256
1/2
✓ Branch 0 taken 23814 times.
✗ Branch 1 not taken.
23814 if(!p_igetw(&tempDoorComboSet.doorcombo_r[j][k],f,true))
4257 {
4258 return qe_invalid;
4259 }
4260 23814 }
4261 3969 }
4262
4263
2/2
✓ Branch 0 taken 3969 times.
✓ Branch 1 taken 441 times.
4410 for(int32_t j=0; j<9; j++)
4264 {
4265
2/2
✓ Branch 0 taken 23814 times.
✓ Branch 1 taken 3969 times.
27783 for(int32_t k=0; k<6; k++)
4266 {
4267
1/2
✓ Branch 0 taken 23814 times.
✗ Branch 1 not taken.
23814 if(!p_getc(&tempDoorComboSet.doorcset_r[j][k],f,true))
4268 {
4269 return qe_invalid;
4270 }
4271 23814 }
4272 3969 }
4273
4274 //up bomb rubble
4275
2/2
✓ Branch 0 taken 882 times.
✓ Branch 1 taken 441 times.
1323 for(int32_t j=0; j<2; j++)
4276 {
4277
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 882 times.
882 if(!p_igetw(&tempDoorComboSet.bombdoorcombo_u[j],f,true))
4278 {
4279 return qe_invalid;
4280 }
4281 882 }
4282
4283
2/2
✓ Branch 0 taken 882 times.
✓ Branch 1 taken 441 times.
1323 for(int32_t j=0; j<2; j++)
4284 {
4285
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 882 times.
882 if(!p_getc(&tempDoorComboSet.bombdoorcset_u[j],f,true))
4286 {
4287 return qe_invalid;
4288 }
4289 882 }
4290
4291 //down bomb rubble
4292
2/2
✓ Branch 0 taken 882 times.
✓ Branch 1 taken 441 times.
1323 for(int32_t j=0; j<2; j++)
4293 {
4294
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 882 times.
882 if(!p_igetw(&tempDoorComboSet.bombdoorcombo_d[j],f,true))
4295 {
4296 return qe_invalid;
4297 }
4298 882 }
4299
4300
2/2
✓ Branch 0 taken 882 times.
✓ Branch 1 taken 441 times.
1323 for(int32_t j=0; j<2; j++)
4301 {
4302
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 882 times.
882 if(!p_getc(&tempDoorComboSet.bombdoorcset_d[j],f,true))
4303 {
4304 return qe_invalid;
4305 }
4306 882 }
4307
4308 //left bomb rubble
4309
2/2
✓ Branch 0 taken 1323 times.
✓ Branch 1 taken 441 times.
1764 for(int32_t j=0; j<3; j++)
4310 {
4311
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1323 times.
1323 if(!p_igetw(&tempDoorComboSet.bombdoorcombo_l[j],f,true))
4312 {
4313 return qe_invalid;
4314 }
4315 1323 }
4316
4317
2/2
✓ Branch 0 taken 1323 times.
✓ Branch 1 taken 441 times.
1764 for(int32_t j=0; j<3; j++)
4318 {
4319
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1323 times.
1323 if(!p_getc(&tempDoorComboSet.bombdoorcset_l[j],f,true))
4320 {
4321 return qe_invalid;
4322 }
4323 1323 }
4324
4325
1/2
✓ Branch 0 taken 441 times.
✗ Branch 1 not taken.
441 if(Header->zelda_version < 0x193)
4326 {
4327 if(!p_getc(&padding,f,true))
4328 {
4329 return qe_invalid;
4330 }
4331
4332 }
4333
4334 //right bomb rubble
4335
2/2
✓ Branch 0 taken 1323 times.
✓ Branch 1 taken 441 times.
1764 for(int32_t j=0; j<3; j++)
4336 {
4337
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1323 times.
1323 if(!p_igetw(&tempDoorComboSet.bombdoorcombo_r[j],f,true))
4338 {
4339 return qe_invalid;
4340 }
4341 1323 }
4342
4343
2/2
✓ Branch 0 taken 1323 times.
✓ Branch 1 taken 441 times.
1764 for(int32_t j=0; j<3; j++)
4344 {
4345
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1323 times.
1323 if(!p_getc(&tempDoorComboSet.bombdoorcset_r[j],f,true))
4346 {
4347 return qe_invalid;
4348 }
4349 1323 }
4350
4351
1/2
✓ Branch 0 taken 441 times.
✗ Branch 1 not taken.
441 if(Header->zelda_version < 0x193)
4352 {
4353 if(!p_getc(&padding,f,true))
4354 {
4355 return qe_invalid;
4356 }
4357 }
4358
4359 //walkthrough stuff
4360
2/2
✓ Branch 0 taken 1764 times.
✓ Branch 1 taken 441 times.
2205 for(int32_t j=0; j<4; j++)
4361 {
4362
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1764 times.
1764 if(!p_igetw(&tempDoorComboSet.walkthroughcombo[j],f,true))
4363 {
4364 return qe_invalid;
4365 }
4366 1764 }
4367
4368
2/2
✓ Branch 0 taken 1764 times.
✓ Branch 1 taken 441 times.
2205 for(int32_t j=0; j<4; j++)
4369 {
4370
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1764 times.
1764 if(!p_getc(&tempDoorComboSet.walkthroughcset[j],f,true))
4371 {
4372 return qe_invalid;
4373 }
4374 1764 }
4375
4376 //flags
4377
2/2
✓ Branch 0 taken 882 times.
✓ Branch 1 taken 441 times.
1323 for(int32_t j=0; j<2; j++)
4378 {
4379
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 882 times.
882 if(!p_getc(&tempDoorComboSet.flags[j],f,true))
4380 {
4381 return qe_invalid;
4382 }
4383 882 }
4384
4385
1/2
✓ Branch 0 taken 441 times.
✗ Branch 1 not taken.
441 if(Header->zelda_version < 0x193)
4386 {
4387 if(!pfread(&tempDoorComboSet.expansion,sizeof(tempDoorComboSet.expansion),f,true))
4388 {
4389 return qe_invalid;
4390 }
4391 }
4392
4393
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 441 times.
441 if(keepdata==true)
4394 {
4395 441 memcpy(&DoorComboSets[i], &tempDoorComboSet, sizeof(tempDoorComboSet));
4396 441 }
4397 441 }
4398
4399
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true)
4400 {
4401 63 door_combo_set_count=temp_door_combo_set_count;
4402 63 }
4403
4404 63 return 0;
4405 63 }
4406
4407 int32_t count_dmaps()
4408 {
4409 int32_t i=MAXDMAPS-1;
4410 bool found=false;
4411
4412 while(i>=0 && !found)
4413 {
4414 if((DMaps[i].map!=0)||(DMaps[i].level!=0)||(DMaps[i].xoff!=0)||
4415 (DMaps[i].compass!=0)||(DMaps[i].color!=0)||(DMaps[i].midi!=0)||
4416 (DMaps[i].cont!=0)||(DMaps[i].type!=0))
4417 found=true;
4418
4419 for(int32_t j=0; j<8; j++)
4420 {
4421 if(DMaps[i].grid[j]!=0)
4422
4423 found=true;
4424 }
4425
4426 if((DMaps[i].name[0]!=0)||(DMaps[i].title[0]!=0)||
4427 (DMaps[i].intro[0]!=0)||(DMaps[i].tmusic[0]!=0))
4428 found=true;
4429
4430 if((DMaps[i].minimap_1_tile!=0)||(DMaps[i].minimap_2_tile!=0)||
4431 (DMaps[i].largemap_1_tile!=0)||(DMaps[i].largemap_2_tile!=0)||
4432 (DMaps[i].minimap_1_cset!=0)||(DMaps[i].minimap_2_cset!=0)||
4433 (DMaps[i].largemap_1_cset!=0)||(DMaps[i].largemap_2_cset!=0))
4434 found=true;
4435
4436 if(!found)
4437 {
4438 i--;
4439 }
4440 }
4441
4442 return i+1;
4443 }
4444
4445
4446 int32_t count_shops(miscQdata *Misc)
4447 {
4448 int32_t i=255,j;
4449 bool found=false;
4450
4451 while(i>=0 && !found)
4452 {
4453 j=2;
4454
4455 while(j>=0 && !found)
4456 {
4457 if((Misc->shop[i].hasitem[j]!=0)||(Misc->shop[i].price[j]!=0))
4458 {
4459 found=true;
4460 }
4461 else
4462 {
4463 j--;
4464 }
4465 }
4466
4467 if(Misc->shop[i].name[0]!=0)
4468 {
4469 found=true;
4470 }
4471
4472 if(!found)
4473 {
4474 i--;
4475 }
4476 }
4477
4478 return i+1;
4479 }
4480
4481 int32_t count_infos(miscQdata *Misc)
4482 {
4483 int32_t i=255,j;
4484 bool found=false;
4485
4486 while(i>=0 && !found)
4487 {
4488 j=2;
4489
4490 while(j>=0 && !found)
4491 {
4492 if((Misc->info[i].str[j]!=0)||(Misc->info[i].price[j]!=0))
4493 {
4494 found=true;
4495 }
4496 else
4497 {
4498 j--;
4499 }
4500 }
4501
4502 if(Misc->info[i].name[0]!=0)
4503 {
4504 found=true;
4505 }
4506
4507 if(!found)
4508 {
4509 i--;
4510 }
4511 }
4512
4513 return i+1;
4514 }
4515
4516 int32_t count_warprings(miscQdata *Misc)
4517 {
4518 int32_t i=15,j;
4519 bool found=false;
4520
4521 while(i>=0 && !found)
4522 {
4523 j=7;
4524
4525 while(j>=0 && !found)
4526 {
4527 if((Misc->warp[i].dmap[j]!=0)||(Misc->warp[i].scr[j]!=0))
4528 {
4529 found=true;
4530 }
4531 else
4532 {
4533 j--;
4534 }
4535 }
4536
4537 if(!found)
4538 {
4539 i--;
4540 }
4541 }
4542
4543 return i+1;
4544 }
4545
4546 int32_t count_palcycles(miscQdata *Misc)
4547 {
4548 int32_t i=255,j;
4549 bool found=false;
4550
4551 while(i>=0 && !found)
4552 {
4553 j=2;
4554
4555 while(j>=0 && !found)
4556 {
4557 if(Misc->cycles[i][j].count!=0)
4558 {
4559 found=true;
4560 }
4561 else
4562 {
4563 j--;
4564 }
4565 }
4566
4567 if(!found)
4568 {
4569 i--;
4570 }
4571 }
4572
4573 return i+1;
4574 }
4575
4576 106687 void clear_screen(mapscr *temp_scr)
4577 {
4578 106687 temp_scr->zero_memory();
4579 106687 }
4580
4581 63 int32_t readdmaps(PACKFILE *f, zquestheader *Header, word, word, word start_dmap, word max_dmaps, bool keepdata)
4582 {
4583 63 word dmapstoread=0;
4584 dmap tempDMap;
4585
4586 int32_t dummy;
4587 63 word s_version=0, s_cversion=0;
4588 byte padding;
4589
4590
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true)
4591 {
4592
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 63 times.
32319 for(int32_t i=0; i<max_dmaps; i++)
4593 {
4594 32256 memset(&DMaps[start_dmap+i],0,sizeof(dmap));
4595 32256 sprintf(DMaps[start_dmap+i].title," ");
4596 32256 sprintf(DMaps[start_dmap+i].intro," ");
4597 32256 DMaps[start_dmap+i].type |= dmCAVE;
4598 32256 }
4599 63 }
4600
4601
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!Header || Header->zelda_version > 0x192)
4602 {
4603 //section version info
4604
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_version,f,true))
4605 {
4606 return qe_invalid;
4607 }
4608
4609 63 FFCore.quest_format[vDMaps] = s_version;
4610
4611 //al_trace("DMaps version %d\n", s_version);
4612
4613
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_cversion,f,true))
4614 {
4615 return qe_invalid;
4616 }
4617
4618 //section size
4619
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy,f,true))
4620 {
4621 return qe_invalid;
4622 }
4623
4624 //finally... section data
4625
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&dmapstoread,f,true))
4626 {
4627 return qe_invalid;
4628 }
4629 63 }
4630 else
4631 {
4632 if((Header->zelda_version < 0x192)||
4633 ((Header->zelda_version == 0x192)&&(Header->build<5)))
4634 {
4635 dmapstoread=32;
4636 }
4637 else if(s_version <= 4)
4638 {
4639 dmapstoread=OLDMAXDMAPS;
4640 }
4641 else
4642 {
4643 dmapstoread=MAXDMAPS;
4644 }
4645 }
4646
4647
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 dmapstoread=zc_min(dmapstoread, max_dmaps);
4648
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 dmapstoread=zc_min(dmapstoread, MAXDMAPS-start_dmap);
4649
4650
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 63 times.
32319 for(int32_t i=start_dmap; i<dmapstoread+start_dmap; i++)
4651 {
4652 32256 memset(&tempDMap,0,sizeof(dmap));
4653 32256 sprintf(tempDMap.title," ");
4654 32256 sprintf(tempDMap.intro," ");
4655
4656
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&tempDMap.map,f,keepdata))
4657 {
4658 return qe_invalid;
4659 }
4660
4661
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
32256 if(s_version <= 4)
4662 {
4663 byte tempbyte;
4664
4665 if(!p_getc(&tempbyte,f,keepdata))
4666 {
4667 return qe_invalid;
4668 }
4669
4670 tempDMap.level=(word)tempbyte;
4671 }
4672 else
4673 {
4674
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&tempDMap.level,f,keepdata))
4675 {
4676 return qe_invalid;
4677 }
4678 }
4679
4680
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&tempDMap.xoff,f,keepdata))
4681 {
4682 return qe_invalid;
4683 }
4684
4685
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&tempDMap.compass,f,keepdata))
4686 {
4687 return qe_invalid;
4688 }
4689
4690
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(s_version > 8) // February 2009
4691 {
4692
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&tempDMap.color,f,true))
4693 {
4694 return qe_invalid;
4695 }
4696 32256 }
4697 else
4698 {
4699 byte tempbyte;
4700
4701 if(!p_getc(&tempbyte,f,true))
4702 {
4703 return qe_invalid;
4704 }
4705
4706 tempDMap.color = (word)tempbyte;
4707 }
4708
4709
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&tempDMap.midi,f,keepdata))
4710 {
4711 return qe_invalid;
4712 }
4713
4714
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&tempDMap.cont,f,keepdata))
4715 {
4716 return qe_invalid;
4717 }
4718
4719
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&tempDMap.type,f,keepdata))
4720 {
4721 return qe_invalid;
4722 }
4723
4724
3/4
✓ Branch 0 taken 201 times.
✓ Branch 1 taken 32055 times.
✓ Branch 2 taken 201 times.
✗ Branch 3 not taken.
32457 if((tempDMap.type & dmfTYPE) == dmOVERW &&
4725
1/2
✓ Branch 0 taken 201 times.
✗ Branch 1 not taken.
201 (!Header || Header->zelda_version >= 0x210)) // Not sure exactly when this changed
4726 201 tempDMap.xoff = 0;
4727
4728
2/2
✓ Branch 0 taken 258048 times.
✓ Branch 1 taken 32256 times.
290304 for(int32_t j=0; j<8; j++)
4729 {
4730
1/2
✓ Branch 0 taken 258048 times.
✗ Branch 1 not taken.
258048 if(!p_getc(&tempDMap.grid[j],f,keepdata))
4731 {
4732 return qe_invalid;
4733 }
4734 258048 }
4735
4736
3/8
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 32256 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 32256 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
32256 if(Header && ((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<41))))
4737 {
4738 if(tempDMap.level>0&&tempDMap.level<10)
4739 {
4740 sprintf(tempDMap.title,"LEVEL-%d ", tempDMap.level);
4741 }
4742
4743 if(i==0 && Header->zelda_version <= 0x190)
4744 {
4745 tempDMap.cont-=tempDMap.xoff;
4746 tempDMap.compass-=tempDMap.xoff;
4747 }
4748
4749 //forgotten -DD
4750 if(tempDMap.level==0)
4751 {
4752 tempDMap.flags=dmfCAVES|dmf3STAIR|dmfWHIRLWIND|dmfGUYCAVES;
4753 }
4754 }
4755 else
4756 {
4757
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!pfread(&tempDMap.name,sizeof(DMaps[0].name),f,true))
4758 {
4759 return qe_invalid;
4760 }
4761
4762
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!pfread(&tempDMap.title,sizeof(DMaps[0].title),f,true))
4763 {
4764 return qe_invalid;
4765 }
4766
4767
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!pfread(&tempDMap.intro,sizeof(DMaps[0].intro),f,true))
4768 {
4769 return qe_invalid;
4770 }
4771
4772
3/8
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 32256 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 32256 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
32256 if(Header && ((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<152))))
4773 {
4774 if ((tempDMap.type & dmfTYPE) == dmOVERW) tempDMap.flags = dmfCAVES | dmf3STAIR | dmfWHIRLWIND | dmfGUYCAVES;
4775 if(keepdata==true)
4776 {
4777 memcpy(&DMaps[i], &tempDMap, sizeof(tempDMap));
4778 }
4779
4780 continue;
4781 }
4782
4783
2/4
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 32256 times.
✗ Branch 3 not taken.
32256 if(Header && (Header->zelda_version < 0x193))
4784 {
4785 if(!p_getc(&padding,f,keepdata))
4786 {
4787 return qe_invalid;
4788 }
4789 }
4790
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if ( s_version >= 11 )
4791 {
4792
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&tempDMap.minimap_1_tile,f,keepdata))
4793 {
4794 return qe_invalid;
4795 }
4796 2048 }
4797 else
4798 {
4799
1/2
✓ Branch 0 taken 30208 times.
✗ Branch 1 not taken.
30208 if(!p_igetw(&tempDMap.minimap_1_tile,f,keepdata))
4800 {
4801 return qe_invalid;
4802 }
4803 }
4804
4805
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&tempDMap.minimap_1_cset,f,keepdata))
4806 {
4807 return qe_invalid;
4808 }
4809
4810
2/4
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 32256 times.
✗ Branch 3 not taken.
32256 if(Header && (Header->zelda_version < 0x193))
4811 {
4812 if(!p_getc(&padding,f,keepdata))
4813 {
4814 return qe_invalid;
4815 }
4816 }
4817
4818
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if ( s_version >= 11 )
4819 {
4820
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&tempDMap.minimap_2_tile,f,keepdata))
4821 {
4822 return qe_invalid;
4823 }
4824 2048 }
4825 else
4826 {
4827
1/2
✓ Branch 0 taken 30208 times.
✗ Branch 1 not taken.
30208 if(!p_igetw(&tempDMap.minimap_2_tile,f,keepdata))
4828 {
4829 return qe_invalid;
4830 }
4831 }
4832
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&tempDMap.minimap_2_cset,f,keepdata))
4833 {
4834 return qe_invalid;
4835 }
4836
4837
2/4
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 32256 times.
✗ Branch 3 not taken.
32256 if(Header && (Header->zelda_version < 0x193))
4838 {
4839 if(!p_getc(&padding,f,keepdata))
4840 {
4841 return qe_invalid;
4842 }
4843 }
4844
4845
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if ( s_version >= 11 )
4846 {
4847
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&tempDMap.largemap_1_tile,f,keepdata))
4848 {
4849 return qe_invalid;
4850 }
4851 2048 }
4852 else
4853 {
4854
1/2
✓ Branch 0 taken 30208 times.
✗ Branch 1 not taken.
30208 if(!p_igetw(&tempDMap.largemap_1_tile,f,keepdata))
4855 {
4856 return qe_invalid;
4857 }
4858 }
4859
4860
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&tempDMap.largemap_1_cset,f,keepdata))
4861 {
4862 return qe_invalid;
4863 }
4864
4865
2/4
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 32256 times.
✗ Branch 3 not taken.
32256 if(Header && (Header->zelda_version < 0x193))
4866 {
4867
4868 if(!p_getc(&padding,f,keepdata))
4869 {
4870 return qe_invalid;
4871 }
4872 }
4873
4874
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if ( s_version >= 11 )
4875 {
4876
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&tempDMap.largemap_2_tile,f,keepdata))
4877 {
4878 return qe_invalid;
4879 }
4880 2048 }
4881 else
4882 {
4883
1/2
✓ Branch 0 taken 30208 times.
✗ Branch 1 not taken.
30208 if(!p_igetw(&tempDMap.largemap_2_tile,f,keepdata))
4884 {
4885 return qe_invalid;
4886 }
4887 }
4888
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&tempDMap.largemap_2_cset,f,keepdata))
4889 {
4890 return qe_invalid;
4891 }
4892
4893
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!pfread(&tempDMap.tmusic,sizeof(DMaps[0].tmusic),f,true))
4894 {
4895 return qe_invalid;
4896 }
4897 }
4898
4899
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
32256 if(s_version>1)
4900 {
4901
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&tempDMap.tmusictrack,f,keepdata))
4902 {
4903 return qe_invalid;
4904 }
4905
4906
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&tempDMap.active_subscreen,f,keepdata))
4907 {
4908 return qe_invalid;
4909 }
4910
4911
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&tempDMap.passive_subscreen,f,keepdata))
4912 {
4913 return qe_invalid;
4914 }
4915 32256 }
4916
4917
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
32256 if(s_version>2)
4918 {
4919 byte di[32];
4920
4921
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!pfread(&di, 32, f, true)) return qe_invalid;
4922
4923
2/2
✓ Branch 0 taken 8257536 times.
✓ Branch 1 taken 32256 times.
8289792 for(int32_t j=0; j<MAXITEMS; j++)
4924 {
4925
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8257536 times.
8257536 if(di[j/8] & (1 << (j%8))) tempDMap.disableditems[j]=1;
4926 8257536 else tempDMap.disableditems[j]=0;
4927 8257536 }
4928 32256 }
4929
4930
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(s_version >= 6)
4931 {
4932
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetl(&tempDMap.flags,f,keepdata))
4933 {
4934 return qe_invalid;
4935 }
4936 32256 }
4937 else if(s_version>3)
4938 {
4939 char temp;
4940
4941 if(!p_getc(&temp,f,keepdata))
4942 {
4943 return qe_invalid;
4944 }
4945
4946 tempDMap.flags = temp;
4947 }
4948 else if(tempDMap.level==0 && ((Header->zelda_version < 0x211) || ((Header->zelda_version == 0x211) && (Header->build<18))))
4949 {
4950 tempDMap.flags=dmfCAVES|dmf3STAIR|dmfWHIRLWIND|dmfGUYCAVES;
4951 }
4952 else
4953 tempDMap.flags=0;
4954
4955
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(s_version<7)
4956 {
4957 if(tempDMap.level==0 && get_bit(deprecated_rules,14))
4958 tempDMap.flags|= dmfVIEWMAP;
4959 }
4960
4961
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(s_version<8)
4962 {
4963 if(tempDMap.level==0 && (tempDMap.type&dmfTYPE)==dmDNGN)
4964 {
4965 tempDMap.type &= ~dmDNGN;
4966 tempDMap.type |= dmCAVE;
4967 }
4968 else if((tempDMap.type&dmfTYPE)==dmCAVE)
4969 {
4970 tempDMap.flags |= dmfMINIMAPCOLORFIX;
4971 }
4972 }
4973
4974
3/8
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 32256 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 32256 times.
✗ Branch 7 not taken.
32256 if(Header && ((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>=41)))
4975 32256 && (Header->zelda_version < 0x193))
4976 {
4977 if(!p_getc(&padding,f,keepdata))
4978 {
4979 return qe_invalid;
4980 }
4981 }
4982
4983
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
32256 if(s_version >= 10)
4984 {
4985
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_getc(&tempDMap.sideview,f,keepdata))
4986 {
4987 return qe_invalid;
4988 }
4989 2048 }
4990
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if(s_version < 10) tempDMap.sideview = 0;
4991
4992 //Dmap Scripts
4993
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
32256 if(s_version >= 12)
4994 {
4995
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetw(&tempDMap.script,f,keepdata))
4996 {
4997 return qe_invalid;
4998 }
4999
2/2
✓ Branch 0 taken 16384 times.
✓ Branch 1 taken 2048 times.
18432 for ( int32_t q = 0; q < 8; q++ )
5000 {
5001
1/2
✓ Branch 0 taken 16384 times.
✗ Branch 1 not taken.
16384 if(!p_igetl(&tempDMap.initD[q],f,keepdata))
5002 {
5003 return qe_invalid;
5004 }
5005 16384 }
5006 2048 }
5007
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if ( s_version < 12 )
5008 {
5009 30208 tempDMap.script = 0;
5010
2/2
✓ Branch 0 taken 241664 times.
✓ Branch 1 taken 30208 times.
271872 for ( int32_t q = 0; q < 8; q++ )
5011 {
5012 241664 tempDMap.initD[q] = 0;
5013 241664 }
5014 30208 }
5015
5016
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
32256 if(s_version >= 13)
5017 {
5018
2/2
✓ Branch 0 taken 16384 times.
✓ Branch 1 taken 2048 times.
18432 for ( int32_t q = 0; q < 8; q++ )
5019 {
5020
2/2
✓ Branch 0 taken 1064960 times.
✓ Branch 1 taken 16384 times.
1081344 for ( int32_t w = 0; w < 65; w++ )
5021 {
5022
1/2
✓ Branch 0 taken 1064960 times.
✗ Branch 1 not taken.
1064960 if(!p_getc(&tempDMap.initD_label[q][w],f,keepdata))
5023 {
5024 return qe_invalid;
5025 }
5026 1064960 }
5027 16384 }
5028 2048 }
5029
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if ( s_version < 13 )
5030 {
5031 30208 tempDMap.script = 0;
5032
2/2
✓ Branch 0 taken 241664 times.
✓ Branch 1 taken 30208 times.
271872 for ( int32_t q = 0; q < 8; q++ )
5033 {
5034
2/2
✓ Branch 0 taken 15708160 times.
✓ Branch 1 taken 241664 times.
15949824 for ( int32_t w = 0; w < 65; w++ )
5035 15708160 tempDMap.initD_label[q][w] = 0;
5036 241664 }
5037 30208 }
5038
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if(s_version >= 14)
5039 {
5040
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetw(&tempDMap.active_sub_script,f,keepdata))
5041 {
5042 return qe_invalid;
5043 }
5044
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetw(&tempDMap.passive_sub_script,f,keepdata))
5045 {
5046 return qe_invalid;
5047 }
5048
2/2
✓ Branch 0 taken 16384 times.
✓ Branch 1 taken 2048 times.
18432 for ( int32_t q = 0; q < 8; ++q )
5049 {
5050
1/2
✓ Branch 0 taken 16384 times.
✗ Branch 1 not taken.
16384 if(!p_igetl(&tempDMap.sub_initD[q],f,keepdata))
5051 {
5052 return qe_invalid;
5053 }
5054 16384 }
5055
2/2
✓ Branch 0 taken 16384 times.
✓ Branch 1 taken 2048 times.
18432 for(int32_t q = 0; q < 8; ++q)
5056 {
5057
2/2
✓ Branch 0 taken 1064960 times.
✓ Branch 1 taken 16384 times.
1081344 for ( int32_t w = 0; w < 65; ++w )
5058 {
5059
1/2
✓ Branch 0 taken 1064960 times.
✗ Branch 1 not taken.
1064960 if(!p_getc(&tempDMap.sub_initD_label[q][w],f,keepdata))
5060 {
5061 return qe_invalid;
5062 }
5063 1064960 }
5064 16384 }
5065 2048 }
5066 else
5067 {
5068 30208 tempDMap.active_sub_script = 0;
5069 30208 tempDMap.passive_sub_script = 0;
5070
2/2
✓ Branch 0 taken 241664 times.
✓ Branch 1 taken 30208 times.
271872 for(int32_t q = 0; q < 8; ++q)
5071 {
5072 241664 tempDMap.sub_initD[q] = 0;
5073
2/2
✓ Branch 0 taken 15708160 times.
✓ Branch 1 taken 241664 times.
15949824 for(int32_t w = 0; w < 65; ++w)
5074 15708160 tempDMap.sub_initD_label[q][w] = 0;
5075 241664 }
5076 }
5077
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if(s_version >= 15)
5078 {
5079
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetw(&tempDMap.onmap_script,f,keepdata))
5080 {
5081 return qe_invalid;
5082 }
5083
2/2
✓ Branch 0 taken 16384 times.
✓ Branch 1 taken 2048 times.
18432 for ( int32_t q = 0; q < 8; ++q )
5084 {
5085
1/2
✓ Branch 0 taken 16384 times.
✗ Branch 1 not taken.
16384 if(!p_igetl(&tempDMap.onmap_initD[q],f,keepdata))
5086 {
5087 return qe_invalid;
5088 }
5089 16384 }
5090
2/2
✓ Branch 0 taken 16384 times.
✓ Branch 1 taken 2048 times.
18432 for(int32_t q = 0; q < 8; ++q)
5091 {
5092
2/2
✓ Branch 0 taken 1064960 times.
✓ Branch 1 taken 16384 times.
1081344 for ( int32_t w = 0; w < 65; ++w )
5093 {
5094
1/2
✓ Branch 0 taken 1064960 times.
✗ Branch 1 not taken.
1064960 if(!p_getc(&tempDMap.onmap_initD_label[q][w],f,keepdata))
5095 {
5096 return qe_invalid;
5097 }
5098 1064960 }
5099 16384 }
5100 2048 }
5101 else
5102 {
5103 30208 tempDMap.onmap_script = 0;
5104
2/2
✓ Branch 0 taken 241664 times.
✓ Branch 1 taken 30208 times.
271872 for(int32_t q = 0; q < 8; ++q)
5105 {
5106 241664 tempDMap.onmap_initD[q] = 0;
5107
2/2
✓ Branch 0 taken 15708160 times.
✓ Branch 1 taken 241664 times.
15949824 for(int32_t w = 0; w < 65; ++w)
5108 {
5109 15708160 tempDMap.onmap_initD_label[q][w] = 0;
5110 15708160 }
5111 241664 }
5112 }
5113
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if(s_version >= 16)
5114 {
5115
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2048 times.
2048 if(!p_igetw(&tempDMap.mirrorDMap,f,keepdata))
5116 {
5117 return qe_invalid;
5118 }
5119 2048 }
5120 else
5121 {
5122 30208 tempDMap.mirrorDMap = -1;
5123 }
5124
5125
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
32256 if(keepdata==true)
5126 {
5127 32256 memcpy(&DMaps[i], &tempDMap, sizeof(tempDMap));
5128 32256 }
5129 32256 }
5130
5131 63 return 0;
5132 63 }
5133
5134 63 int32_t readmisccolors(PACKFILE *f, zquestheader *Header, miscQdata *Misc, bool keepdata)
5135 {
5136 //these are here to bypass compiler warnings about unused arguments
5137 63 Header=Header;
5138
5139 miscQdata temp_misc;
5140 63 word s_version=0, s_cversion=0;
5141 63 int32_t tempsize=0;
5142 word dummyw;
5143
5144 63 memcpy(&temp_misc,Misc,sizeof(temp_misc));
5145
5146 //section version info
5147
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(!p_igetw(&s_version,f,true))
5148 {
5149 return qe_invalid;
5150 }
5151
5152 63 FFCore.quest_format[vColours] = s_version;
5153
5154 63 al_trace("Misc Colours section version: %d\n", s_version);
5155
5156 //al_trace("Misc. colors version %d\n", s_version);
5157
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_cversion,f,true))
5158 {
5159 return qe_invalid;
5160 }
5161
5162
5163 //section size
5164
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&tempsize,f,true))
5165 {
5166 return qe_invalid;
5167 }
5168
5169 //finally... section data
5170 63 readsize=0;
5171
5172
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.text,f,true))
5173 {
5174 return qe_invalid;
5175 }
5176
5177
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.caption,f,true))
5178 {
5179 return qe_invalid;
5180 }
5181
5182
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.overw_bg,f,true))
5183 {
5184 return qe_invalid;
5185 }
5186
5187
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.dngn_bg,f,true))
5188 {
5189 return qe_invalid;
5190 }
5191
5192
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.dngn_fg,f,true))
5193 {
5194 return qe_invalid;
5195 }
5196
5197
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.cave_fg,f,true))
5198 {
5199 return qe_invalid;
5200 }
5201
5202
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.bs_dk,f,true))
5203 {
5204 return qe_invalid;
5205 }
5206
5207
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.bs_goal,f,true))
5208 {
5209 return qe_invalid;
5210 }
5211
5212
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.compass_lt,f,true))
5213 {
5214 return qe_invalid;
5215 }
5216
5217
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.compass_dk,f,true))
5218 {
5219 return qe_invalid;
5220 }
5221
5222
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.subscr_bg,f,true))
5223 {
5224 return qe_invalid;
5225 }
5226
5227
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.triframe_color,f,true))
5228 {
5229 return qe_invalid;
5230 }
5231
5232
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.hero_dot,f,true))
5233 {
5234 return qe_invalid;
5235 }
5236
5237
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.bmap_bg,f,true))
5238 {
5239 return qe_invalid;
5240 }
5241
5242
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.bmap_fg,f,true))
5243 {
5244 return qe_invalid;
5245 }
5246
5247
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.triforce_cset,f,true))
5248 {
5249 return qe_invalid;
5250 }
5251
5252
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.triframe_cset,f,true))
5253 {
5254 return qe_invalid;
5255 }
5256
5257
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.overworld_map_cset,f,true))
5258 {
5259 return qe_invalid;
5260 }
5261
5262
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.dungeon_map_cset,f,true))
5263 {
5264 return qe_invalid;
5265 }
5266
5267
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.blueframe_cset,f,true))
5268 {
5269 return qe_invalid;
5270 }
5271
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version < 4)
5272 {
5273
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if(!p_igetw(&dummyw,f,true))
5274 return qe_invalid;
5275 59 temp_misc.colors.triforce_tile = dummyw;
5276
5277
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if(!p_igetw(&dummyw,f,true))
5278 return qe_invalid;
5279 59 temp_misc.colors.triframe_tile = dummyw;
5280
5281
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if(!p_igetw(&dummyw,f,true))
5282 return qe_invalid;
5283 59 temp_misc.colors.overworld_map_tile = dummyw;
5284
5285
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if(!p_igetw(&dummyw,f,true))
5286 return qe_invalid;
5287 59 temp_misc.colors.dungeon_map_tile = dummyw;
5288
5289
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if(!p_igetw(&dummyw,f,true))
5290 return qe_invalid;
5291 59 temp_misc.colors.blueframe_tile = dummyw;
5292
5293
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if(!p_igetw(&dummyw,f,true))
5294 return qe_invalid;
5295 59 temp_misc.colors.HCpieces_tile = dummyw;
5296 59 }
5297
5298
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.HCpieces_cset,f,true))
5299 {
5300 return qe_invalid;
5301 }
5302
5303
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.subscr_shadow,f,true))
5304 {
5305 return qe_invalid;
5306 }
5307
5308
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version < 2)
5309 {
5310 temp_misc.colors.msgtext = 0x01;
5311 }
5312 else
5313 {
5314
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_getc(&temp_misc.colors.msgtext, f, true))
5315 {
5316 return qe_invalid;
5317 }
5318 }
5319
5320
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if ( s_version >= 3 ) //expanded tile pages to 825
5321 {
5322
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_igetl(&temp_misc.colors.triforce_tile,f,true))
5323 {
5324 return qe_invalid;
5325 }
5326
5327
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_igetl(&temp_misc.colors.triframe_tile,f,true))
5328 {
5329 return qe_invalid;
5330 }
5331
5332
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_igetl(&temp_misc.colors.overworld_map_tile,f,true))
5333 {
5334 return qe_invalid;
5335 }
5336
5337
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_igetl(&temp_misc.colors.dungeon_map_tile,f,true))
5338 {
5339 return qe_invalid;
5340 }
5341
5342
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_igetl(&temp_misc.colors.blueframe_tile,f,true))
5343 {
5344 return qe_invalid;
5345 }
5346
5347
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if(!p_igetl(&temp_misc.colors.HCpieces_tile,f,true))
5348 {
5349 return qe_invalid;
5350 }
5351 4 }
5352
5353
5354
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true)
5355 {
5356 63 memcpy(Misc, &temp_misc, sizeof(temp_misc));
5357 63 }
5358
5359 63 return 0;
5360 63 }
5361
5362 63 int32_t readgameicons(PACKFILE *f, zquestheader *, miscQdata *Misc, bool keepdata)
5363 {
5364 miscQdata temp_misc;
5365 63 word s_version=0, s_cversion=0;
5366 byte icons;
5367 63 int32_t tempsize=0;
5368
5369 63 memcpy(&temp_misc,Misc,sizeof(temp_misc));
5370
5371 //section version info
5372
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(!p_igetw(&s_version,f,true))
5373 {
5374 return qe_invalid;
5375 }
5376
5377 63 FFCore.quest_format[vIcons] = s_version;
5378
5379 //al_trace("Game icons version %d\n", s_version);
5380
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_cversion,f,true))
5381 {
5382 return qe_invalid;
5383 }
5384
5385
5386 //section size
5387
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&tempsize,f,true))
5388 {
5389 return qe_invalid;
5390 }
5391
5392 //finally... section data
5393 63 readsize=0;
5394
5395 63 icons=4;
5396
5397
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if ( s_version >= 10 )
5398 {
5399
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t i=0; i<icons; i++)
5400 {
5401
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_igetl(&temp_misc.icons[i],f,true))
5402 {
5403 return qe_invalid;
5404 }
5405 16 }
5406 4 }
5407 else
5408 {
5409
2/2
✓ Branch 0 taken 236 times.
✓ Branch 1 taken 59 times.
295 for(int32_t i=0; i<icons; i++)
5410 {
5411
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 236 times.
236 if(!p_igetw(&temp_misc.icons[i],f,true))
5412 {
5413 return qe_invalid;
5414 }
5415 236 }
5416 }
5417
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true)
5418 {
5419 63 memcpy(Misc, &temp_misc, sizeof(temp_misc));
5420 63 }
5421
5422 63 return 0;
5423 63 }
5424
5425 63 int32_t readmisc(PACKFILE *f, zquestheader *Header, miscQdata *Misc, bool keepdata)
5426 {
5427 63 word maxinfos=256;
5428 63 word maxshops=256;
5429 63 word shops=16, infos=16, warprings=8, palcycles=256, windwarps=9, triforces=8, icons=4;
5430 63 word ponds=16, pondsize=72, expansionsize=98*2;
5431 byte tempbyte, padding;
5432 miscQdata temp_misc;
5433 63 word s_version=0, s_cversion=0;
5434 word swaptmp;
5435 63 int32_t tempsize=0;
5436
5437 63 memcpy(&temp_misc,Misc,sizeof(temp_misc));
5438
5439
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<maxshops; ++i)
5440 {
5441 16128 memset(&temp_misc.shop, 0, sizeof(shoptype)*256);
5442 16128 }
5443
5444
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<maxinfos; ++i)
5445 {
5446 16128 memset(&temp_misc.info, 0, sizeof(infotype)*256);
5447 16128 }
5448
5449
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(Header->zelda_version > 0x192)
5450 {
5451 //section version info
5452
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_version,f,true))
5453 {
5454 return qe_invalid;
5455 }
5456
5457 63 FFCore.quest_format[vMisc] = s_version;
5458
5459 //al_trace("Misc. data version %d\n", s_version);
5460
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_cversion,f,true))
5461 {
5462 return qe_invalid;
5463 }
5464
5465
5466 //section size
5467
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&tempsize,f,true))
5468 {
5469 return qe_invalid;
5470 }
5471 63 }
5472
5473 //finally... section data
5474 63 readsize=0;
5475
5476 //shops
5477
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(Header->zelda_version > 0x192)
5478 {
5479
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&shops,f,true))
5480 {
5481 return qe_invalid;
5482 }
5483 63 }
5484
5485
2/2
✓ Branch 0 taken 567 times.
✓ Branch 1 taken 63 times.
630 for(int32_t i=0; i<shops; i++)
5486 {
5487
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 567 times.
567 if(s_version > 6)
5488 {
5489
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 567 times.
567 if(!pfread(temp_misc.shop[i].name,sizeof(temp_misc.shop[i].name),f,true))
5490 {
5491 return qe_invalid;
5492 }
5493 567 }
5494
5495
2/2
✓ Branch 0 taken 1701 times.
✓ Branch 1 taken 567 times.
2268 for(int32_t j=0; j<3; j++)
5496 {
5497
1/2
✓ Branch 0 taken 1701 times.
✗ Branch 1 not taken.
1701 if(!p_getc(&temp_misc.shop[i].item[j],f,true))
5498 {
5499 return qe_invalid;
5500 }
5501
5502
1/2
✓ Branch 0 taken 1701 times.
✗ Branch 1 not taken.
1701 if(s_version < 4)
5503 {
5504 temp_misc.shop[i].hasitem[j] = (temp_misc.shop[i].item[j] == 0) ? 0 : 1;
5505 }
5506 1701 }
5507
5508
1/2
✓ Branch 0 taken 567 times.
✗ Branch 1 not taken.
567 if(Header->zelda_version < 0x193)
5509 {
5510 if(!p_getc(&tempbyte,f,true))
5511 {
5512 return qe_invalid;
5513 }
5514 }
5515
5516
2/2
✓ Branch 0 taken 1701 times.
✓ Branch 1 taken 567 times.
2268 for(int32_t j=0; j<3; j++)
5517 {
5518
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1701 times.
1701 if(!p_igetw(&temp_misc.shop[i].price[j],f,true))
5519 {
5520 return qe_invalid;
5521 }
5522 1701 }
5523
5524
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 567 times.
567 if(s_version > 3)
5525 {
5526
2/2
✓ Branch 0 taken 1701 times.
✓ Branch 1 taken 567 times.
2268 for(int32_t j=0; j<3; j++)
5527 {
5528
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1701 times.
1701 if(!p_getc(&temp_misc.shop[i].hasitem[j],f,true))
5529 return qe_invalid;
5530 1701 }
5531 567 }
5532
5533 /*
5534 if(s_version < 8)
5535 {
5536 for(int32_t j=0; j<3; j++)
5537 {
5538 (&temp_misc.shop[i].str[j])=0; //initialise.
5539 }
5540 }
5541 */
5542 567 }
5543
5544 //filter all the 0 items to the end (yeah, bubble sort; sue me)
5545
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<maxshops; ++i)
5546 {
5547
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 16128 times.
48384 for(int32_t j=0; j<3-1; j++)
5548 {
5549
2/2
✓ Branch 0 taken 48384 times.
✓ Branch 1 taken 32256 times.
80640 for(int32_t k=0; k<2-j; k++)
5550 {
5551
2/2
✓ Branch 0 taken 1454 times.
✓ Branch 1 taken 46930 times.
48384 if(temp_misc.shop[i].hasitem[k]==0)
5552 {
5553 46930 swaptmp = temp_misc.shop[i].item[k];
5554 46930 temp_misc.shop[i].item[k] = temp_misc.shop[i].item[k+1];
5555 46930 temp_misc.shop[i].item[k+1] = swaptmp;
5556 46930 swaptmp = temp_misc.shop[i].price[k];
5557 46930 temp_misc.shop[i].price[k] = temp_misc.shop[i].price[k+1];
5558 46930 temp_misc.shop[i].price[k+1] = swaptmp;
5559 46930 swaptmp = temp_misc.shop[i].hasitem[k];
5560 46930 temp_misc.shop[i].hasitem[k] = temp_misc.shop[i].hasitem[k+1];
5561 46930 temp_misc.shop[i].hasitem[k+1] = swaptmp;
5562 46930 }
5563 48384 }
5564 32256 }
5565 16128 }
5566
5567 //infos
5568
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(Header->zelda_version > 0x192)
5569 {
5570
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&infos,f,true))
5571 {
5572 return qe_invalid;
5573 }
5574 63 }
5575
5576
2/2
✓ Branch 0 taken 928 times.
✓ Branch 1 taken 63 times.
991 for(int32_t i=0; i<infos; i++)
5577 {
5578
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 928 times.
928 if(s_version > 6)
5579 {
5580
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 928 times.
928 if(!pfread(temp_misc.info[i].name,sizeof(temp_misc.info[i].name),f,true))
5581 {
5582 return qe_invalid;
5583 }
5584 928 }
5585
5586
2/2
✓ Branch 0 taken 2784 times.
✓ Branch 1 taken 928 times.
3712 for(int32_t j=0; j<3; j++)
5587 {
5588
1/4
✓ Branch 0 taken 2784 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
2784 if((Header->zelda_version < 0x192)||
5589
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2784 times.
2784 ((Header->zelda_version == 0x192)&&(Header->build<146)))
5590 {
5591 if(!p_getc(&tempbyte,f,true))
5592 {
5593 return qe_invalid;
5594 }
5595
5596 temp_misc.info[i].str[j]=tempbyte;
5597 }
5598 else
5599 {
5600
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2784 times.
2784 if(!p_igetw(&temp_misc.info[i].str[j],f,true))
5601 {
5602 return qe_invalid;
5603 }
5604 }
5605 2784 }
5606
5607
1/2
✓ Branch 0 taken 928 times.
✗ Branch 1 not taken.
928 if(Header->zelda_version < 0x193)
5608 {
5609 if(!p_getc(&tempbyte,f,true))
5610 {
5611 return qe_invalid;
5612 }
5613 }
5614
5615
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 928 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
928 if((Header->zelda_version == 0x192)&&(Header->build>145))
5616 {
5617 if(!p_getc(&padding,f,true))
5618 {
5619 return qe_invalid;
5620 }
5621 }
5622
5623
2/2
✓ Branch 0 taken 2784 times.
✓ Branch 1 taken 928 times.
3712 for(int32_t j=0; j<3; j++)
5624 {
5625
1/2
✓ Branch 0 taken 2784 times.
✗ Branch 1 not taken.
2784 if(!p_igetw(&temp_misc.info[i].price[j],f,true))
5626 {
5627 return qe_invalid;
5628 }
5629 2784 }
5630 928 }
5631
5632 //filter all the 0 strings to the end (yeah, bubble sort; sue me)
5633
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<maxinfos; ++i)
5634 {
5635
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 16128 times.
48384 for(int32_t j=0; j<3-1; j++)
5636 {
5637
2/2
✓ Branch 0 taken 48384 times.
✓ Branch 1 taken 32256 times.
80640 for(int32_t k=0; k<2-j; k++)
5638 {
5639
2/2
✓ Branch 0 taken 1113 times.
✓ Branch 1 taken 47271 times.
48384 if(temp_misc.info[i].str[k]==0)
5640 {
5641 47271 swaptmp = temp_misc.info[i].str[k];
5642 47271 temp_misc.info[i].str[k] = temp_misc.info[i].str[k+1];
5643 47271 temp_misc.info[i].str[k+1] = swaptmp;
5644 47271 swaptmp = temp_misc.info[i].price[k];
5645 47271 temp_misc.info[i].price[k] = temp_misc.info[i].price[k+1];
5646 47271 temp_misc.info[i].price[k+1] = swaptmp;
5647 47271 }
5648 48384 }
5649 32256 }
5650 16128 }
5651
5652
5653 //warp rings
5654
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version > 5)
5655 63 warprings++;
5656
5657
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(Header->zelda_version > 0x192)
5658 {
5659
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&warprings,f,true))
5660 {
5661 return qe_invalid;
5662 }
5663 63 }
5664
5665
2/2
✓ Branch 0 taken 603 times.
✓ Branch 1 taken 63 times.
666 for(int32_t i=0; i<warprings; i++)
5666 {
5667
2/2
✓ Branch 0 taken 5427 times.
✓ Branch 1 taken 603 times.
6030 for(int32_t j=0; j<8+((s_version > 5)?1:0); j++)
5668 {
5669
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5427 times.
5427 if(s_version <= 3)
5670 {
5671 if(!p_getc(&tempbyte,f,true))
5672 {
5673 return qe_invalid;
5674 }
5675
5676 temp_misc.warp[i].dmap[j]=(word)tempbyte;
5677 }
5678 else
5679 {
5680
1/2
✓ Branch 0 taken 5427 times.
✗ Branch 1 not taken.
5427 if(!p_igetw(&temp_misc.warp[i].dmap[j],f,true))
5681 {
5682 return qe_invalid;
5683 }
5684 }
5685 5427 }
5686
5687
2/2
✓ Branch 0 taken 5427 times.
✓ Branch 1 taken 603 times.
6030 for(int32_t j=0; j<8+((s_version > 5)?1:0); j++)
5688 {
5689
1/2
✓ Branch 0 taken 5427 times.
✗ Branch 1 not taken.
5427 if(!p_getc(&temp_misc.warp[i].scr[j],f,true))
5690 {
5691 return qe_invalid;
5692 }
5693 5427 }
5694
5695
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 603 times.
603 if(!p_getc(&temp_misc.warp[i].size,f,true))
5696 {
5697 return qe_invalid;
5698 }
5699
5700
1/2
✓ Branch 0 taken 603 times.
✗ Branch 1 not taken.
603 if(Header->zelda_version < 0x193)
5701 {
5702 if(!p_getc(&tempbyte,f,true))
5703 {
5704 return qe_invalid;
5705 }
5706 }
5707 603 }
5708
5709 //palette cycles
5710
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(Header->zelda_version < 0x193) //in 1.93+, palette cycling is saved with the palettes
5711 {
5712 for(int32_t i=0; i<256; i++)
5713 {
5714 for(int32_t j=0; j<3; j++)
5715 {
5716 temp_misc.cycles[i][j].first=0;
5717 temp_misc.cycles[i][j].count=0;
5718 temp_misc.cycles[i][j].speed=0;
5719 }
5720 }
5721
5722 if((Header->zelda_version < 0x192)||
5723 ((Header->zelda_version == 0x192)&&(Header->build<73)))
5724 {
5725 palcycles=16;
5726 }
5727
5728 for(int32_t i=0; i<palcycles; i++)
5729 {
5730 for(int32_t j=0; j<3; j++)
5731 {
5732 if(!p_getc(&temp_misc.cycles[i][j].first,f,true))
5733 {
5734 return qe_invalid;
5735 }
5736
5737 if(!p_getc(&temp_misc.cycles[i][j].count,f,true))
5738 {
5739 return qe_invalid;
5740 }
5741
5742 if(!p_getc(&temp_misc.cycles[i][j].speed,f,true))
5743 {
5744 return qe_invalid;
5745 }
5746 }
5747 }
5748 }
5749
5750 //Wind warps are now just another warp ring.
5751
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version <= 5)
5752 {
5753 if(Header->zelda_version > 0x192)
5754 {
5755 if(!p_igetw(&windwarps,f,true))
5756 {
5757 return qe_invalid;
5758 }
5759 }
5760
5761 for(int32_t i=0; i<windwarps; i++)
5762 {
5763 if(s_version <= 3)
5764 {
5765 if(!p_getc(&tempbyte,f,true))
5766 {
5767 return qe_invalid;
5768 }
5769
5770 temp_misc.warp[8].dmap[i]=tempbyte;
5771 }
5772 else
5773 {
5774 if(!p_igetw(&temp_misc.warp[8].dmap[i],f,true))
5775 {
5776 return qe_invalid;
5777 }
5778 }
5779
5780 if(!p_getc(&temp_misc.warp[8].scr[i],f,true))
5781 {
5782 return qe_invalid;
5783 }
5784
5785 temp_misc.warp[8].size = 9;
5786
5787 if(s_version == 5)
5788 {
5789 if(!p_getc(&tempbyte,f,true))
5790 {
5791 return qe_invalid;
5792 }
5793 }
5794 }
5795 }
5796
5797
5798 //triforce pieces
5799
2/2
✓ Branch 0 taken 504 times.
✓ Branch 1 taken 63 times.
567 for(int32_t i=0; i<triforces; i++)
5800 {
5801
1/2
✓ Branch 0 taken 504 times.
✗ Branch 1 not taken.
504 if(!p_getc(&temp_misc.triforce[i],f,true))
5802 {
5803 return qe_invalid;
5804 }
5805 504 }
5806
5807 //misc color data
5808
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version<3)
5809 {
5810 if(!p_getc(&temp_misc.colors.text,f,true))
5811 {
5812 return qe_invalid;
5813 }
5814
5815 if(!p_getc(&temp_misc.colors.caption,f,true))
5816 {
5817 return qe_invalid;
5818 }
5819
5820 if(!p_getc(&temp_misc.colors.overw_bg,f,true))
5821 {
5822 return qe_invalid;
5823 }
5824
5825 if(!p_getc(&temp_misc.colors.dngn_bg,f,true))
5826 {
5827 return qe_invalid;
5828 }
5829
5830 if(!p_getc(&temp_misc.colors.dngn_fg,f,true))
5831 {
5832 return qe_invalid;
5833 }
5834
5835 if(!p_getc(&temp_misc.colors.cave_fg,f,true))
5836 {
5837 return qe_invalid;
5838 }
5839
5840 if(!p_getc(&temp_misc.colors.bs_dk,f,true))
5841 {
5842 return qe_invalid;
5843 }
5844
5845 if(!p_getc(&temp_misc.colors.bs_goal,f,true))
5846 {
5847 return qe_invalid;
5848 }
5849
5850 if(!p_getc(&temp_misc.colors.compass_lt,f,true))
5851 {
5852 return qe_invalid;
5853 }
5854
5855 if(!p_getc(&temp_misc.colors.compass_dk,f,true))
5856 {
5857 return qe_invalid;
5858 }
5859
5860 if(!p_getc(&temp_misc.colors.subscr_bg,f,true))
5861 {
5862 return qe_invalid;
5863 }
5864
5865 if(!p_getc(&temp_misc.colors.triframe_color,f,true))
5866 {
5867 return qe_invalid;
5868 }
5869
5870 if(!p_getc(&temp_misc.colors.hero_dot,f,true))
5871 {
5872 return qe_invalid;
5873 }
5874
5875 if(!p_getc(&temp_misc.colors.bmap_bg,f,true))
5876 {
5877 return qe_invalid;
5878 }
5879
5880 if(!p_getc(&temp_misc.colors.bmap_fg,f,true))
5881 {
5882 return qe_invalid;
5883 }
5884
5885 if(!p_getc(&temp_misc.colors.triforce_cset,f,true))
5886 {
5887 return qe_invalid;
5888 }
5889
5890 if(!p_getc(&temp_misc.colors.triframe_cset,f,true))
5891 {
5892 return qe_invalid;
5893 }
5894
5895 if(!p_getc(&temp_misc.colors.overworld_map_cset,f,true))
5896 {
5897 return qe_invalid;
5898 }
5899
5900 if(!p_getc(&temp_misc.colors.dungeon_map_cset,f,true))
5901 {
5902 return qe_invalid;
5903 }
5904
5905 if(!p_getc(&temp_misc.colors.blueframe_cset,f,true))
5906 {
5907 return qe_invalid;
5908 }
5909
5910 if(!p_igetw(&temp_misc.colors.triforce_tile,f,true))
5911 {
5912 return qe_invalid;
5913 }
5914
5915 if(!p_igetw(&temp_misc.colors.triframe_tile,f,true))
5916 {
5917 return qe_invalid;
5918 }
5919
5920 if(!p_igetw(&temp_misc.colors.overworld_map_tile,f,true))
5921 {
5922 return qe_invalid;
5923 }
5924
5925 if(!p_igetw(&temp_misc.colors.dungeon_map_tile,f,true))
5926 {
5927 return qe_invalid;
5928 }
5929
5930 if(!p_igetw(&temp_misc.colors.blueframe_tile,f,true))
5931 {
5932 return qe_invalid;
5933 }
5934
5935 if(!p_igetw(&temp_misc.colors.HCpieces_tile,f,true))
5936 {
5937 return qe_invalid;
5938 }
5939
5940 if(!p_getc(&temp_misc.colors.HCpieces_cset,f,true))
5941 {
5942 return qe_invalid;
5943 }
5944
5945 temp_misc.colors.msgtext = 0x01;
5946
5947 if(Header->zelda_version < 0x193)
5948 {
5949 for(int32_t i=0; i<7; i++)
5950 {
5951 if(!p_getc(&tempbyte,f,true))
5952 {
5953 return qe_invalid;
5954 }
5955 }
5956 }
5957
5958 if((Header->zelda_version == 0x192)&&(Header->build>145))
5959 {
5960 for(int32_t i=0; i<256; i++)
5961 {
5962 if(!p_getc(&tempbyte,f,true))
5963 {
5964 return qe_invalid;
5965 }
5966 }
5967 }
5968
5969 if(s_version>1)
5970 {
5971 if(!p_getc(&temp_misc.colors.subscr_shadow,f,true))
5972 {
5973 return qe_invalid;
5974 }
5975 }
5976
5977 //save game icons
5978 if((Header->zelda_version < 0x192)||
5979 ((Header->zelda_version == 0x192)&&(Header->build<73)))
5980 {
5981 icons=3;
5982 }
5983
5984 for(int32_t i=0; i<icons; i++)
5985 {
5986 if(!p_igetw(&temp_misc.icons[i],f,true))
5987 {
5988 return qe_invalid;
5989 }
5990 }
5991 }
5992
5993
1/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
63 if((Header->zelda_version < 0x192)||
5994
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ((Header->zelda_version == 0x192)&&(Header->build<30)))
5995 {
5996 if(keepdata==true)
5997 {
5998 memcpy(Misc, &temp_misc, sizeof(temp_misc));
5999 }
6000
6001 return 0;
6002 }
6003
6004 //pond information
6005
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(Header->zelda_version < 0x193)
6006 {
6007 if((Header->zelda_version == 0x192)&&(Header->build<146))
6008 {
6009 pondsize=25;
6010 }
6011
6012 for(int32_t i=0; i<ponds; i++)
6013 {
6014 for(int32_t j=0; j<pondsize; j++)
6015 {
6016 if(!p_getc(&tempbyte,f,true))
6017 {
6018 return qe_invalid;
6019
6020 }
6021 }
6022 }
6023 }
6024
6025 //end string
6026
1/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
63 if((Header->zelda_version < 0x192)||
6027
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ((Header->zelda_version == 0x192)&&(Header->build<146)))
6028 {
6029 if(!p_getc(&tempbyte,f,true))
6030 {
6031 return qe_invalid;
6032 }
6033
6034 temp_misc.endstring=tempbyte;
6035
6036 if(!p_getc(&tempbyte,f,true))
6037 {
6038 return qe_invalid;
6039 }
6040 }
6041 else
6042 {
6043
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&temp_misc.endstring,f,true))
6044 {
6045 return qe_invalid;
6046 }
6047 }
6048
6049 //expansion
6050
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(Header->zelda_version < 0x193)
6051 {
6052 if((Header->zelda_version == 0x192)&&(Header->build<73))
6053 {
6054 expansionsize=99*2;
6055 }
6056
6057 for(int32_t i=0; i<expansionsize; i++)
6058 {
6059 if(!p_getc(&tempbyte,f,true))
6060 {
6061 return qe_invalid;
6062 }
6063 }
6064 }
6065 //shops v8
6066
6067
6068
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(s_version >= 8)
6069 {
6070
2/2
✓ Branch 0 taken 64 times.
✓ Branch 1 taken 4 times.
68 for(int32_t i=0; i<shops; i++)
6071 {
6072
2/2
✓ Branch 0 taken 192 times.
✓ Branch 1 taken 64 times.
256 for(int32_t j=0; j<3; j++)
6073 {
6074
1/2
✓ Branch 0 taken 192 times.
✗ Branch 1 not taken.
192 if(!p_igetw(&temp_misc.shop[i].str[j],f,true))
6075 return qe_invalid;
6076 192 }
6077 64 }
6078 4 }
6079
6080 63 memset(&temp_misc.questmisc, 0, sizeof(int32_t)*32);
6081 63 memset(&temp_misc.questmisc_strings, 0, sizeof(char)*4096);
6082 63 memset(&temp_misc.zscript_last_compiled_version, 0, sizeof(int32_t));
6083
6084 //v9 includes quest misc[32]
6085
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(s_version >= 9)
6086 {
6087
2/2
✓ Branch 0 taken 128 times.
✓ Branch 1 taken 4 times.
132 for ( int32_t q = 0; q < 32; q++ )
6088 {
6089
1/2
✓ Branch 0 taken 128 times.
✗ Branch 1 not taken.
128 if(!p_igetl(&temp_misc.questmisc[q],f,true))
6090 return qe_invalid;
6091 128 }
6092
2/2
✓ Branch 0 taken 128 times.
✓ Branch 1 taken 4 times.
132 for ( int32_t q = 0; q < 32; q++ )
6093 {
6094
2/2
✓ Branch 0 taken 16384 times.
✓ Branch 1 taken 128 times.
16512 for ( int32_t j = 0; j < 128; j++ )
6095
1/2
✓ Branch 0 taken 16384 times.
✗ Branch 1 not taken.
16384 if(!p_getc(&temp_misc.questmisc_strings[q][j],f,true))
6096 return qe_invalid;
6097 128 }
6098 4 }
6099
6100
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version >= 11 )
6101 {
6102
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_igetl(&temp_misc.zscript_last_compiled_version,f,true))
6103 return qe_invalid;
6104 4 }
6105
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 else if(s_version < 11 )
6106 {
6107 59 temp_misc.zscript_last_compiled_version = -1;
6108 59 }
6109
6110 63 FFCore.quest_format[vLastCompile] = temp_misc.zscript_last_compiled_version;
6111
6112
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version >= 12)
6113 {
6114 byte spr;
6115
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 4 times.
1028 for(int32_t q = 0; q < sprMAX; ++q)
6116 {
6117
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_getc(&spr,f,true))
6118 return qe_invalid;
6119 1024 temp_misc.sprites[q] = spr;
6120 1024 }
6121 4 }
6122 else
6123 {
6124 59 memset(&(temp_misc.sprites), 0, sizeof(temp_misc.sprites));
6125 //temp_misc.sprites[sprFALL] = ;
6126 }
6127
6128
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version >= 13)
6129 {
6130
2/2
✓ Branch 0 taken 256 times.
✓ Branch 1 taken 4 times.
260 for(size_t q = 0; q < 64; ++q)
6131 {
6132 256 bottletype* bt = &(temp_misc.bottle_types[q]);
6133
1/2
✓ Branch 0 taken 256 times.
✗ Branch 1 not taken.
256 if (!pfread(bt->name, 32, f, true))
6134 return qe_invalid;
6135
2/2
✓ Branch 0 taken 768 times.
✓ Branch 1 taken 256 times.
1024 for(size_t j = 0; j < 3; ++j)
6136 {
6137
1/2
✓ Branch 0 taken 768 times.
✗ Branch 1 not taken.
768 if (!p_getc(&(bt->counter[j]), f, true))
6138 return qe_invalid;
6139
1/2
✓ Branch 0 taken 768 times.
✗ Branch 1 not taken.
768 if (!p_igetw(&(bt->amount[j]), f, true))
6140 return qe_invalid;
6141 768 }
6142
1/2
✓ Branch 0 taken 256 times.
✗ Branch 1 not taken.
256 if (!p_getc(&(bt->flags), f, true))
6143 return qe_invalid;
6144
1/2
✓ Branch 0 taken 256 times.
✗ Branch 1 not taken.
256 if (!p_getc(&(bt->next_type), f, true))
6145 return qe_invalid;
6146 256 }
6147
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 4 times.
1028 for(size_t q = 0; q < 256; ++q)
6148 {
6149 1024 bottleshoptype* bst = &(temp_misc.bottle_shop_types[q]);
6150
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if (!pfread(bst->name, 32, f, true))
6151 return qe_invalid;
6152
2/2
✓ Branch 0 taken 3072 times.
✓ Branch 1 taken 1024 times.
4096 for(size_t j = 0; j < 3; ++j)
6153 {
6154
1/2
✓ Branch 0 taken 3072 times.
✗ Branch 1 not taken.
3072 if (!p_getc(&(bst->fill[j]), f, true))
6155 return qe_invalid;
6156
1/2
✓ Branch 0 taken 3072 times.
✗ Branch 1 not taken.
3072 if (!p_igetw(&(bst->comb[j]), f, true))
6157 return qe_invalid;
6158
1/2
✓ Branch 0 taken 3072 times.
✗ Branch 1 not taken.
3072 if (!p_getc(&(bst->cset[j]), f, true))
6159 return qe_invalid;
6160
1/2
✓ Branch 0 taken 3072 times.
✗ Branch 1 not taken.
3072 if (!p_igetw(&(bst->price[j]), f, true))
6161 return qe_invalid;
6162
1/2
✓ Branch 0 taken 3072 times.
✗ Branch 1 not taken.
3072 if (!p_igetw(&(bst->str[j]), f, true))
6163 return qe_invalid;
6164 3072 }
6165 1024 }
6166 4 }
6167 else
6168 {
6169
2/2
✓ Branch 0 taken 3776 times.
✓ Branch 1 taken 59 times.
3835 for(size_t q = 0; q < 64; ++q)
6170 3776 temp_misc.bottle_types[q].clear();
6171
2/2
✓ Branch 0 taken 15104 times.
✓ Branch 1 taken 59 times.
15163 for(size_t q = 0; q < 256; ++q)
6172 15104 temp_misc.bottle_shop_types[q].clear();
6173 }
6174
6175
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version >= 14)
6176 {
6177 byte msfx;
6178
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 4 times.
1028 for(int32_t q = 0; q < sfxMAX; ++q)
6179 {
6180
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_getc(&msfx,f,true))
6181 return qe_invalid;
6182 1024 temp_misc.miscsfx[q] = msfx;
6183 1024 }
6184 4 }
6185 else
6186 {
6187 59 memset(&(temp_misc.miscsfx), 0, sizeof(temp_misc.miscsfx));
6188 59 temp_misc.miscsfx[sfxBUSHGRASS] = WAV_ZN1GRASSCUT;
6189 59 temp_misc.miscsfx[sfxLOWHEART] = WAV_ER;
6190 }
6191
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version < 15)
6192 {
6193 59 temp_misc.miscsfx[sfxHURTPLAYER] = WAV_OUCH;
6194 59 temp_misc.miscsfx[sfxHAMMERPOUND] = WAV_ZN1HAMMERPOST;
6195 59 temp_misc.miscsfx[sfxSUBSCR_ITEM_ASSIGN] = WAV_PLACE;
6196 59 temp_misc.miscsfx[sfxSUBSCR_CURSOR_MOVE] = WAV_CHIME;
6197 59 temp_misc.miscsfx[sfxREFILL] = WAV_MSG;
6198 59 temp_misc.miscsfx[sfxDRAIN] = WAV_MSG;
6199 59 }
6200
6201
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true)
6202 {
6203 63 memcpy(Misc, &temp_misc, sizeof(temp_misc));
6204 63 }
6205
6206 63 return 0;
6207 63 }
6208
6209 extern char *item_string[ITEMCNT];
6210 extern const char *old_item_string[iLast];
6211 extern char *weapon_string[WPNCNT];
6212 extern const char *old_weapon_string[wLast];
6213
6214 63 int32_t readitems(PACKFILE *f, word version, word build, bool keepdata, bool zgpmode)
6215 {
6216 byte padding;
6217 int32_t dummy;
6218 63 word items_to_read=MAXITEMS;
6219 itemdata tempitem;
6220 63 word s_version=0, s_cversion=0;
6221 word dummy_word;
6222
6223
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(version < 0x186)
6224 {
6225 items_to_read=64;
6226 }
6227
6228
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(version > 0x192)
6229 {
6230 63 items_to_read=0;
6231
6232 //section version info
6233
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_version,f,true))
6234 {
6235 return qe_invalid;
6236 }
6237
6238 63 FFCore.quest_format[vItems] = s_version;
6239
6240 //al_trace("Items version %d\n", s_version);
6241
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_cversion,f,true))
6242 {
6243 return qe_invalid;
6244 }
6245
6246 //section size
6247
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy,f,true))
6248 {
6249 return qe_invalid;
6250 }
6251
6252 //finally... section data
6253
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&items_to_read,f,true))
6254 {
6255 return qe_invalid;
6256 }
6257 63 }
6258
6259
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version>1)
6260 {
6261
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<items_to_read; i++)
6262 {
6263 char tempname[64];
6264
6265
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!pfread(tempname, 64, f, keepdata))
6266 {
6267 return qe_invalid;
6268 }
6269
6270
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
16128 if(keepdata)
6271 {
6272 16128 strcpy(item_string[i], tempname);
6273 16128 }
6274 16128 }
6275 63 }
6276 else
6277 {
6278 if(keepdata)
6279 {
6280 for(int32_t i=0; i<ITEMCNT; i++)
6281 {
6282 reset_itemname(i);
6283 }
6284 }
6285 }
6286
6287
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata)
6288 {
6289
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<MAXITEMS; i++)
6290 {
6291 16128 itemdata& id = itemsbuf[i];
6292 16128 memset(&id, 0, sizeof(itemdata));
6293 16128 id.count=-1;
6294 16128 id.playsound=WAV_SCALE;
6295 16128 reset_itembuf(&id,i);
6296 16128 }
6297 63 }
6298
6299
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<items_to_read; i++)
6300 {
6301 16128 memset(&tempitem, 0, sizeof(itemdata));
6302 16128 reset_itembuf(&tempitem,i);
6303
6304
6305
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if ( s_version > 35 ) //expanded tiles
6306 {
6307
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.tile,f,true))
6308 {
6309 return qe_invalid;
6310 }
6311 1024 }
6312 else
6313 {
6314
1/2
✓ Branch 0 taken 15104 times.
✗ Branch 1 not taken.
15104 if(!p_igetw(&tempitem.tile,f,true))
6315 {
6316 return qe_invalid;
6317 }
6318 }
6319
6320
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.misc_flags,f,true))
6321 {
6322 return qe_invalid;
6323 }
6324
6325
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.csets,f,true))
6326 {
6327 return qe_invalid;
6328 }
6329
6330
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.frames,f,true))
6331 {
6332 return qe_invalid;
6333 }
6334
6335
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.speed,f,true))
6336 {
6337 return qe_invalid;
6338 }
6339
6340
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.delay,f,true))
6341 {
6342 return qe_invalid;
6343 }
6344
6345
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(version < 0x193)
6346 {
6347 if(!p_getc(&padding,f,true))
6348 {
6349 return qe_invalid;
6350 }
6351
6352 if((version < 0x192)||((version == 0x192)&&(build<186)))
6353 {
6354 switch(i)
6355 {
6356 case iShield:
6357 tempitem.ltm=get_bit(quest_rules,qr_BSZELDA)?-12:10;
6358 break;
6359
6360 case iMShield:
6361 tempitem.ltm=get_bit(quest_rules,qr_BSZELDA)?-6:-10;
6362 break;
6363
6364 default:
6365 tempitem.ltm=0;
6366 break;
6367 }
6368
6369 tempitem.count=-1;
6370 tempitem.flags=tempitem.wpn=tempitem.wpn2=tempitem.wpn3=tempitem.wpn3=tempitem.pickup_hearts=
6371 tempitem.misc1=tempitem.misc2=tempitem.usesound=0;
6372 tempitem.family=0xFF;
6373 tempitem.playsound=WAV_SCALE;
6374 reset_itembuf(&tempitem,i);
6375
6376 if(keepdata==true)
6377 {
6378 memcpy(&itemsbuf[i], &tempitem, sizeof(itemdata));
6379 }
6380
6381 continue;
6382 }
6383 }
6384
6385
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetl(&tempitem.ltm,f,true))
6386 {
6387 return qe_invalid;
6388 }
6389
6390
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(version < 0x193)
6391 {
6392 for(int32_t q=0; q<12; q++)
6393 {
6394 if(!p_getc(&padding,f,true))
6395 {
6396 return qe_invalid;
6397 }
6398 }
6399 }
6400
6401
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version>1)
6402 {
6403
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if ( s_version >= 31 )
6404 {
6405
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.family,f,true))
6406 {
6407 return qe_invalid;
6408 }
6409 1024 }
6410 else
6411 {
6412
1/2
✓ Branch 0 taken 15104 times.
✗ Branch 1 not taken.
15104 if(!p_getc(&tempitem.family,f,true))
6413 {
6414 return qe_invalid;
6415 }
6416 }
6417
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 16)
6418 if(tempitem.family == 0xFF)
6419 tempitem.family = itype_misc;
6420
6421
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.fam_type,f,true))
6422 {
6423 return qe_invalid;
6424 }
6425
6426
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version>5)
6427 {
6428
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if(s_version>=31)
6429 {
6430
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.power,f,true))
6431 {
6432 return qe_invalid;
6433 }
6434 1024 }
6435 else
6436 {
6437
1/2
✓ Branch 0 taken 15104 times.
✗ Branch 1 not taken.
15104 if(!p_getc(&tempitem.power,f,true))
6438 {
6439 return qe_invalid;
6440 }
6441 }
6442
6443 //converted flags from 16b to 32b -Z
6444
2/2
✓ Branch 0 taken 15104 times.
✓ Branch 1 taken 1024 times.
16128 if ( s_version < 41 )
6445 {
6446
1/2
✓ Branch 0 taken 15104 times.
✗ Branch 1 not taken.
15104 if(!p_igetw(&tempitem.flags,f,true))
6447 {
6448 return qe_invalid;
6449 }
6450 15104 }
6451 else
6452 {
6453
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.flags,f,true))
6454 {
6455 return qe_invalid;
6456 }
6457 }
6458 16128 }
6459 else
6460 {
6461 //tempitem.power = tempitem.fam_type;
6462 char tempchar;
6463
6464 if(!p_getc(&tempchar,f,true))
6465 {
6466 return qe_invalid;
6467 }
6468
6469 tempitem.flags |= (tempchar ? ITEM_GAMEDATA : 0);
6470 }
6471
6472
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetw(&tempitem.script,f,true))
6473 {
6474 return qe_invalid;
6475 }
6476
6477
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version<=3)
6478 {
6479 if(tempitem.script > NUMSCRIPTITEM)
6480 {
6481 tempitem.script = 0;
6482 }
6483 }
6484
6485
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.count,f,true))
6486 {
6487 return qe_invalid;
6488 }
6489
6490
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetw(&tempitem.amount,f,true))
6491 {
6492 return qe_invalid;
6493 }
6494
6495
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetw(&tempitem.collect_script,f,true))
6496 {
6497 return qe_invalid;
6498 }
6499
6500
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version<=3)
6501 {
6502 if(tempitem.collect_script > NUMSCRIPTITEM)
6503 {
6504 tempitem.collect_script = 0;
6505 }
6506 }
6507
6508
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetw(&tempitem.setmax,f,true))
6509 {
6510 return qe_invalid;
6511 }
6512
6513
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetw(&tempitem.max,f,true))
6514 {
6515 return qe_invalid;
6516 }
6517
6518
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.playsound,f,true))
6519 {
6520 return qe_invalid;
6521 }
6522
6523
2/2
✓ Branch 0 taken 129024 times.
✓ Branch 1 taken 16128 times.
145152 for(int32_t j=0; j<8; j++)
6524 {
6525
1/2
✓ Branch 0 taken 129024 times.
✗ Branch 1 not taken.
129024 if(!p_igetl(&tempitem.initiald[j],f,true))
6526 {
6527 return qe_invalid;
6528 }
6529 129024 }
6530
6531
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 16128 times.
48384 for(int32_t j=0; j<2; j++)
6532 {
6533
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&tempitem.initiala[j],f,true))
6534 {
6535 return qe_invalid;
6536 }
6537 32256 }
6538
6539
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
16128 if(s_version>4)
6540 {
6541
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version>5)
6542 {
6543
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.wpn,f,true))
6544 {
6545 return qe_invalid;
6546 }
6547
6548
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.wpn2,f,true))
6549 {
6550 return qe_invalid;
6551 }
6552
6553
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.wpn3,f,true))
6554 {
6555 return qe_invalid;
6556 }
6557
6558
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.wpn4,f,true))
6559 {
6560 return qe_invalid;
6561 }
6562
6563
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
16128 if(s_version>=15)
6564 {
6565
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.wpn5,f,true))
6566 {
6567 return qe_invalid;
6568 }
6569
6570
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.wpn6,f,true))
6571 {
6572 return qe_invalid;
6573 }
6574
6575
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.wpn7,f,true))
6576 {
6577 return qe_invalid;
6578 }
6579
6580
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.wpn8,f,true))
6581 {
6582 return qe_invalid;
6583 }
6584
6585
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.wpn9,f,true))
6586 {
6587 return qe_invalid;
6588 }
6589
6590
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.wpn10,f,true))
6591 {
6592 return qe_invalid;
6593 }
6594 16128 }
6595
6596
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.pickup_hearts,f,true))
6597 {
6598 return qe_invalid;
6599 }
6600
6601
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
16128 if(s_version<15)
6602 {
6603 if(!p_igetw(&dummy_word,f,true))
6604 {
6605 return qe_invalid;
6606 }
6607
6608 tempitem.misc1=dummy_word;
6609
6610 if(!p_igetw(&dummy_word,f,true))
6611 {
6612 return qe_invalid;
6613 }
6614
6615 tempitem.misc2=dummy_word;
6616 }
6617 else
6618 {
6619
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetl(&tempitem.misc1,f,true))
6620 {
6621 return qe_invalid;
6622 }
6623
6624
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetl(&tempitem.misc2,f,true))
6625 {
6626 return qe_invalid;
6627 }
6628
6629 // Version 24: shICE -> shSCRIPT; previously, all shields could block script weapons
6630
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version<24)
6631 {
6632 if(tempitem.family==itype_shield)
6633 {
6634 tempitem.misc1|=shSCRIPT;
6635 }
6636 }
6637 }
6638
6639
2/2
✓ Branch 0 taken 15104 times.
✓ Branch 1 taken 1024 times.
16128 if(s_version < 53)
6640 {
6641 byte tempbyte;
6642
1/2
✓ Branch 0 taken 15104 times.
✗ Branch 1 not taken.
15104 if(!p_getc(&tempbyte,f,true))
6643 {
6644 return qe_invalid;
6645 }
6646 15104 tempitem.cost_amount[0] = tempbyte;
6647 15104 }
6648 else
6649 {
6650
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 1024 times.
3072 for(auto q = 0; q < 2; ++q)
6651 {
6652
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetw(&tempitem.cost_amount[q],f,true))
6653 {
6654 return qe_invalid;
6655 }
6656 2048 }
6657 }
6658 16128 }
6659 else
6660 {
6661 char tempchar;
6662
6663 if(!p_getc(&tempchar,f,true))
6664 {
6665 return qe_invalid;
6666 }
6667
6668 tempitem.flags |= (tempchar ? ITEM_EDIBLE : 0);
6669 }
6670
6671 // June 2007: more misc. attributes
6672
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
16128 if(s_version>=12)
6673 {
6674
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
16128 if(s_version<15)
6675 {
6676 if(!p_igetw(&dummy_word,f,true))
6677 {
6678 return qe_invalid;
6679 }
6680
6681 tempitem.misc3=dummy_word;
6682
6683 if(!p_igetw(&dummy_word,f,true))
6684 {
6685 return qe_invalid;
6686 }
6687
6688 tempitem.misc4=dummy_word;
6689 }
6690 else
6691 {
6692
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetl(&tempitem.misc3,f,true))
6693 {
6694 return qe_invalid;
6695 }
6696
6697
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetl(&tempitem.misc4,f,true))
6698 {
6699 return qe_invalid;
6700 }
6701
6702
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetl(&tempitem.misc5,f,true))
6703 {
6704 return qe_invalid;
6705 }
6706
6707
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetl(&tempitem.misc6,f,true))
6708 {
6709 return qe_invalid;
6710 }
6711
6712
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetl(&tempitem.misc7,f,true))
6713 {
6714 return qe_invalid;
6715 }
6716
6717
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetl(&tempitem.misc8,f,true))
6718 {
6719 return qe_invalid;
6720 }
6721
6722
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetl(&tempitem.misc9,f,true))
6723 {
6724 return qe_invalid;
6725 }
6726
6727
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_igetl(&tempitem.misc10,f,true))
6728 {
6729 return qe_invalid;
6730 }
6731 }
6732
6733
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempitem.usesound,f,true))
6734 {
6735 return qe_invalid;
6736 }
6737
6738
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if(s_version >= 49)
6739 {
6740
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_getc(&tempitem.usesound2,f,true))
6741 {
6742 return qe_invalid;
6743 }
6744 1024 }
6745 15104 else tempitem.usesound2 = 0;
6746
6747
3/4
✓ Branch 0 taken 15104 times.
✓ Branch 1 taken 1024 times.
✓ Branch 2 taken 15104 times.
✗ Branch 3 not taken.
16128 if(s_version < 50 && tempitem.family == itype_mirror)
6748 {
6749 //Split continue/dmap warp effect/sfx, port for old
6750 tempitem.misc2 = tempitem.misc1;
6751 tempitem.usesound2 = tempitem.usesound;
6752 }
6753 16128 }
6754 16128 }
6755
6756
2/2
✓ Branch 0 taken 15104 times.
✓ Branch 1 taken 1024 times.
16128 if ( s_version >= 26 ) //! New itemdata vars for weapon editor. -Z
6757 { // temp.useweapon, temp.usedefence, temp.weaprange, temp.weap_pattern[ITEM_MOVEMENT_PATTERNS]
6758
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_getc(&tempitem.useweapon,f,true))
6759 {
6760 return qe_invalid;
6761 }
6762
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_getc(&tempitem.usedefence,f,true))
6763 {
6764 return qe_invalid;
6765 }
6766
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.weaprange,f,true))
6767 {
6768 return qe_invalid;
6769 }
6770
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.weapduration,f,true))
6771 {
6772 return qe_invalid;
6773 }
6774
2/2
✓ Branch 0 taken 10240 times.
✓ Branch 1 taken 1024 times.
11264 for ( int32_t q = 0; q < ITEM_MOVEMENT_PATTERNS; q++ )
6775 {
6776
1/2
✓ Branch 0 taken 10240 times.
✗ Branch 1 not taken.
10240 if(!p_igetl(&tempitem.weap_pattern[q],f,true))
6777 {
6778 return qe_invalid;
6779 }
6780 10240 }
6781 1024 }
6782
6783
2/2
✓ Branch 0 taken 15104 times.
✓ Branch 1 taken 1024 times.
16128 if ( s_version >= 27 ) //! New itemdata vars for weapon editor. -Z
6784 { // temp.useweapon, temp.usedefence, temp.weaprange, temp.weap_pattern[ITEM_MOVEMENT_PATTERNS]
6785
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.duplicates,f,true))
6786 {
6787 return qe_invalid;
6788 }
6789
2/2
✓ Branch 0 taken 8192 times.
✓ Branch 1 taken 1024 times.
9216 for ( int32_t q = 0; q < INITIAL_D; q++ )
6790 {
6791
1/2
✓ Branch 0 taken 8192 times.
✗ Branch 1 not taken.
8192 if(!p_igetl(&tempitem.weap_initiald[q],f,true))
6792 {
6793 return qe_invalid;
6794 }
6795 8192 }
6796
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 1024 times.
3072 for ( int32_t q = 0; q < INITIAL_A; q++ )
6797 {
6798
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_getc(&tempitem.weap_initiala[q],f,true))
6799 {
6800 return qe_invalid;
6801 }
6802 2048 }
6803
6804
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_getc(&tempitem.drawlayer,f,true))
6805 {
6806 return qe_invalid;
6807 }
6808
6809
6810
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.hxofs,f,true))
6811 {
6812 return qe_invalid;
6813 }
6814
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.hyofs,f,true))
6815 {
6816 return qe_invalid;
6817 }
6818
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.hxsz,f,true))
6819 {
6820 return qe_invalid;
6821 }
6822
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.hysz,f,true))
6823 {
6824 return qe_invalid;
6825 }
6826
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.hzsz,f,true))
6827 {
6828 return qe_invalid;
6829 }
6830
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.xofs,f,true))
6831 {
6832 return qe_invalid;
6833 }
6834
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.yofs,f,true))
6835 {
6836 return qe_invalid;
6837 }
6838
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.weap_hxofs,f,true))
6839 {
6840 return qe_invalid;
6841 }
6842
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.weap_hyofs,f,true))
6843 {
6844 return qe_invalid;
6845 }
6846
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.weap_hxsz,f,true))
6847 {
6848 return qe_invalid;
6849 }
6850
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.weap_hysz,f,true))
6851 {
6852 return qe_invalid;
6853 }
6854
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.weap_hzsz,f,true))
6855 {
6856 return qe_invalid;
6857 }
6858
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.weap_xofs,f,true))
6859 {
6860 return qe_invalid;
6861 }
6862
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.weap_yofs,f,true))
6863 {
6864 return qe_invalid;
6865 }
6866
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetw(&tempitem.weaponscript,f,true))
6867 {
6868 return qe_invalid;
6869 }
6870
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.wpnsprite,f,true))
6871 {
6872 return qe_invalid;
6873 }
6874 1024 auto num_cost_tmr = (s_version > 52 ? 2 : 1);
6875
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 1024 times.
3072 for(auto q = 0; q < num_cost_tmr; ++q)
6876 {
6877
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&tempitem.magiccosttimer[q],f,true))
6878 {
6879 return qe_invalid;
6880 }
6881 2048 }
6882
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1024 times.
1024 for(auto q = num_cost_tmr; q < 2; ++q)
6883 tempitem.magiccosttimer[q] = 0;
6884 1024 }
6885
2/2
✓ Branch 0 taken 15104 times.
✓ Branch 1 taken 1024 times.
16128 if ( s_version >= 28 ) //! New itemdata vars for weapon editor. -Z
6886 {
6887 //Item Size FLags, TileWidth, TileHeight
6888
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.overrideFLAGS,f,true))
6889 {
6890 return qe_invalid;
6891 }
6892
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.tilew,f,true))
6893 {
6894 return qe_invalid;
6895 }
6896
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.tileh,f,true))
6897 {
6898 return qe_invalid;
6899 }
6900 1024 }
6901
2/2
✓ Branch 0 taken 15104 times.
✓ Branch 1 taken 1024 times.
16128 if ( s_version >= 29 ) //! More new vars.
6902 {
6903 //Item Size FLags, TileWidth, TileHeight
6904
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.weapoverrideFLAGS,f,true))
6905 {
6906 return qe_invalid;
6907 }
6908
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.weap_tilew,f,true))
6909 {
6910 return qe_invalid;
6911 }
6912
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.weap_tileh,f,true))
6913 {
6914 return qe_invalid;
6915 }
6916 1024 }
6917
2/2
✓ Branch 0 taken 15104 times.
✓ Branch 1 taken 1024 times.
16128 if ( s_version >= 30 ) //! More new vars.
6918 {
6919 //Pickup Type
6920
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempitem.pickup,f,true))
6921 {
6922 return qe_invalid;
6923 }
6924 1024 }
6925
2/2
✓ Branch 0 taken 15104 times.
✓ Branch 1 taken 1024 times.
16128 if ( s_version >= 32 ) //! More new vars.
6926 {
6927 //Pickup Type
6928
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetw(&tempitem.pstring,f,true))
6929 {
6930 return qe_invalid;
6931 }
6932 1024 }
6933
2/2
✓ Branch 0 taken 15104 times.
✓ Branch 1 taken 1024 times.
16128 if ( s_version >= 33 ) //! More new vars.
6934 {
6935 //Pickup Type
6936
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetw(&tempitem.pickup_string_flags,f,true))
6937 {
6938 return qe_invalid;
6939 }
6940 1024 }
6941
2/2
✓ Branch 0 taken 15104 times.
✓ Branch 1 taken 1024 times.
16128 if ( s_version >= 34 ) //! cost counter
6942 {
6943
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1024 times.
1024 if(s_version < 53)
6944 {
6945 if(!p_getc(&tempitem.cost_counter[0],f,true))
6946 {
6947 return qe_invalid;
6948 }
6949 }
6950 else
6951 {
6952
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 1024 times.
3072 for(auto q = 0; q < 2; ++q)
6953 {
6954
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_getc(&tempitem.cost_counter[q],f,true))
6955 {
6956 return qe_invalid;
6957 }
6958 2048 }
6959 }
6960 1024 }
6961
2/2
✓ Branch 0 taken 15104 times.
✓ Branch 1 taken 1024 times.
16128 if ( s_version >= 44 ) //! sprite scripts
6962 {
6963
2/2
✓ Branch 0 taken 8192 times.
✓ Branch 1 taken 1024 times.
9216 for ( int32_t q = 0; q < 8; q++ )
6964 {
6965
2/2
✓ Branch 0 taken 532480 times.
✓ Branch 1 taken 8192 times.
540672 for ( int32_t w = 0; w < 65; w++ )
6966 {
6967
1/2
✓ Branch 0 taken 532480 times.
✗ Branch 1 not taken.
532480 if(!p_getc(&(tempitem.initD_label[q][w]),f,keepdata))
6968 {
6969 return qe_invalid;
6970 }
6971 532480 }
6972
2/2
✓ Branch 0 taken 532480 times.
✓ Branch 1 taken 8192 times.
540672 for ( int32_t w = 0; w < 65; w++ )
6973 {
6974
1/2
✓ Branch 0 taken 532480 times.
✗ Branch 1 not taken.
532480 if(!p_getc(&(tempitem.weapon_initD_label[q][w]),f,keepdata))
6975 {
6976 return qe_invalid;
6977 }
6978 532480 }
6979
2/2
✓ Branch 0 taken 532480 times.
✓ Branch 1 taken 8192 times.
540672 for ( int32_t w = 0; w < 65; w++ )
6980 {
6981
1/2
✓ Branch 0 taken 532480 times.
✗ Branch 1 not taken.
532480 if(!p_getc(&(tempitem.sprite_initD_label[q][w]),f,keepdata))
6982 {
6983 return qe_invalid;
6984 }
6985 532480 }
6986
1/2
✓ Branch 0 taken 8192 times.
✗ Branch 1 not taken.
8192 if(!p_igetl(&(tempitem.sprite_initiald[q]),f,keepdata))
6987 {
6988 return qe_invalid;
6989 }
6990
6991 8192 }
6992
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 1024 times.
3072 for ( int32_t q = 0; q < 2; q++ )
6993 {
6994
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_getc(&(tempitem.sprite_initiala[q]),f,keepdata))
6995 {
6996 return qe_invalid;
6997 }
6998 2048 }
6999 //Pickup Type
7000
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetw(&tempitem.sprite_script,f,true))
7001 {
7002 return qe_invalid;
7003 }
7004 1024 }
7005
2/2
✓ Branch 0 taken 15104 times.
✓ Branch 1 taken 1024 times.
16128 if ( s_version >= 48 ) //! pickup flags
7006 {
7007
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_getc(&(tempitem.pickupflag),f,keepdata))
7008 {
7009 return qe_invalid;
7010 }
7011 1024 }
7012 16128 }
7013 else
7014 {
7015 tempitem.count=-1;
7016 tempitem.family=itype_misc;
7017 tempitem.flags=tempitem.wpn=tempitem.wpn2=tempitem.wpn3=tempitem.wpn3=tempitem.pickup_hearts=tempitem.misc1=tempitem.misc2=tempitem.usesound=0;
7018 tempitem.playsound=WAV_SCALE;
7019 reset_itembuf(&tempitem,i);
7020 }
7021
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if(s_version < 53)
7022 {
7023
4/4
✓ Branch 0 taken 14799 times.
✓ Branch 1 taken 177 times.
✓ Branch 2 taken 69 times.
✓ Branch 3 taken 59 times.
15104 switch(tempitem.family)
7024 {
7025 case itype_arrow:
7026 177 tempitem.cost_counter[1] = crARROWS;
7027 177 tempitem.cost_amount[1] = 1;
7028 177 break;
7029 case itype_bomb:
7030 69 tempitem.cost_counter[1] = crBOMBS;
7031 69 tempitem.cost_amount[1] = 1;
7032 69 break;
7033 case itype_sbomb:
7034 59 tempitem.cost_counter[1] = crSBOMBS;
7035 59 tempitem.cost_amount[1] = 1;
7036 59 break;
7037 default:
7038 14799 tempitem.cost_counter[1] = crNONE;
7039 14799 tempitem.cost_amount[1] = 0;
7040 14799 }
7041 15104 tempitem.magiccosttimer[1] = 0;
7042 15104 }
7043
7044
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(keepdata==true)
7045 {
7046 16128 memcpy(&itemsbuf[i], &tempitem, sizeof(itemdata));
7047 16128 }
7048 else if(zgpmode)
7049 {
7050 itemsbuf[i].tile=tempitem.tile;
7051 itemsbuf[i].misc_flags=tempitem.misc_flags;
7052 itemsbuf[i].csets=tempitem.csets;
7053 itemsbuf[i].frames=tempitem.frames;
7054 itemsbuf[i].speed=tempitem.speed;
7055 itemsbuf[i].delay=tempitem.delay;
7056 itemsbuf[i].ltm=tempitem.ltm;
7057 }
7058 16128 }
7059
7060 //////////////////////////////////////////////////////
7061 // Now do any updates because of new item additions
7062 // (These can't be done above because items_to_read
7063 // might be too low.)
7064 //////////////////////////////////////////////////////
7065
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true)
7066 {
7067
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<MAXITEMS; i++)
7068 {
7069 16128 memcpy(&tempitem, &itemsbuf[i], sizeof(itemdata));
7070
7071 //Account for older quests that didn't have an actual item for the used letter
7072
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
16128 if(s_version < 2 && i==iLetterUsed)
7073 {
7074 reset_itembuf(&tempitem, iLetterUsed);
7075 strcpy(item_string[i],old_item_string[i]);
7076 tempitem.tile = itemsbuf[iLetter].tile;
7077 tempitem.csets = itemsbuf[iLetter].csets;
7078 tempitem.misc_flags = itemsbuf[iLetter].misc_flags;
7079 tempitem.frames = itemsbuf[iLetter].frames;
7080 tempitem.speed = itemsbuf[iLetter].speed;
7081 tempitem.ltm = itemsbuf[iLetter].ltm;
7082 }
7083
7084
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 3)
7085 {
7086 switch(i)
7087 {
7088 case iRocsFeather:
7089 case iHoverBoots:
7090 case iSpinScroll:
7091 case iL2SpinScroll:
7092 case iCrossScroll:
7093 case iQuakeScroll:
7094 case iL2QuakeScroll:
7095 case iWhispRing:
7096 case iL2WhispRing:
7097 case iChargeRing:
7098 case iL2ChargeRing:
7099 case iPerilScroll:
7100 case iWalletL3:
7101 case iQuiverL4:
7102 case iBombBagL4:
7103 case iBracelet:
7104 case iL2Bracelet:
7105 case iOldGlove:
7106 case iL2Ladder:
7107 case iWealthMedal:
7108 case iL2WealthMedal:
7109 case iL3WealthMedal:
7110 reset_itembuf(&tempitem, i);
7111 strcpy(item_string[i],old_item_string[i]);
7112 break;
7113
7114 case iSShield:
7115 reset_itembuf(&tempitem, i);
7116 strcpy(item_string[i],old_item_string[i]);
7117 strcpy(item_string[iShield],old_item_string[iShield]);
7118 strcpy(item_string[iMShield],old_item_string[iMShield]);
7119 break;
7120 }
7121 }
7122
7123
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 5)
7124 {
7125 switch(i)
7126 {
7127 case iHeartRing:
7128 case iL2HeartRing:
7129 case iL3HeartRing:
7130 case iMagicRing:
7131 case iL2MagicRing:
7132 case iL3MagicRing:
7133 case iL4MagicRing:
7134 reset_itembuf(&tempitem, i);
7135 strcpy(item_string[i],old_item_string[i]);
7136 break;
7137 }
7138 }
7139
7140
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 6) // April 2007: Advanced item editing capabilities.
7141 {
7142 if(i!=iBPotion && i!=iRPotion)
7143 tempitem.flags |= get_bit(deprecated_rules,32) ? ITEM_KEEPOLD : 0;
7144
7145 switch(i)
7146 {
7147 case iTriforce:
7148 tempitem.fam_type=1;
7149 break;
7150
7151 case iBigTri:
7152 tempitem.fam_type=0;
7153 break;
7154
7155 case iBombs:
7156 tempitem.fam_type=i_bomb;
7157 tempitem.power=4;
7158 tempitem.wpn=wBOMB;
7159 tempitem.wpn2=wBOOM;
7160 tempitem.misc1 = 50;
7161
7162 if(get_bit(deprecated_rules,116)) tempitem.misc1 = 200; //qr_SLOWBOMBFUSES
7163
7164 break;
7165
7166 case iSBomb:
7167 tempitem.fam_type=i_sbomb;
7168 tempitem.power=16;
7169 tempitem.wpn=wSBOMB;
7170 tempitem.wpn2=wSBOOM;
7171 tempitem.misc1 = 50;
7172
7173 if(get_bit(deprecated_rules,116)) tempitem.misc1 = 400; //qr_SLOWBOMBFUSES
7174
7175 break;
7176
7177 case iBook:
7178 if(get_bit(deprecated_rules, 113))
7179 tempitem.wpn = wFIREMAGIC; //qr_FIREMAGICSPRITE
7180
7181 break;
7182
7183 case iSArrow:
7184 tempitem.wpn2 = get_bit(deprecated_rules,27) ? wSSPARKLE : 0; //qr_SASPARKLES
7185 tempitem.power=4;
7186 tempitem.flags|=ITEM_GAMEDATA;
7187 tempitem.wpn=wSARROW;
7188 break;
7189
7190 case iGArrow:
7191 tempitem.wpn2 = get_bit(deprecated_rules,28) ? wGSPARKLE : 0; //qr_GASPARKLES
7192 tempitem.power=8;
7193 tempitem.flags|=(ITEM_GAMEDATA|ITEM_FLAG1);
7194 tempitem.wpn=wGARROW;
7195 break;
7196
7197 case iBrang:
7198 tempitem.power=0;
7199 tempitem.wpn=wBRANG;
7200 tempitem.misc1=36;
7201 break;
7202
7203 case iMBrang:
7204 tempitem.wpn2 = get_bit(deprecated_rules,29) ? wMSPARKLE : 0; //qr_MBSPARKLES
7205 tempitem.power=0;
7206 tempitem.wpn=wMBRANG;
7207 break;
7208
7209 case iFBrang:
7210 tempitem.wpn3 = get_bit(deprecated_rules,30) ? wFSPARKLE : 0; //qr_FBSPARKLES
7211 tempitem.power=2;
7212 tempitem.wpn=wFBRANG;
7213 break;
7214
7215 case iBoots:
7216 tempitem.cost_amount[0] = get_bit(deprecated_rules,51) ? 1 : 0;
7217 tempitem.power=7;
7218 break;
7219
7220 case iWand:
7221 tempitem.cost_amount[0] = get_bit(deprecated_rules,49) ? 8 : 0;
7222 tempitem.power=2;
7223 tempitem.wpn=wWAND;
7224 tempitem.wpn3=wMAGIC;
7225 break;
7226
7227 case iBCandle:
7228 tempitem.cost_amount[0] = get_bit(deprecated_rules,50) ? 4 : 0;
7229 tempitem.power=1;
7230 tempitem.flags|=(ITEM_GAMEDATA|ITEM_FLAG1);
7231 tempitem.wpn3=wFIRE;
7232 break;
7233
7234 case iRCandle:
7235 tempitem.cost_amount[0] = get_bit(deprecated_rules,50) ? 4 : 0;
7236 tempitem.power=1;
7237 tempitem.wpn3=wFIRE;
7238 break;
7239
7240 case iSword:
7241 tempitem.power=1;
7242 tempitem.flags|= ITEM_FLAG4 |ITEM_FLAG2;
7243 tempitem.wpn=tempitem.wpn3=wSWORD;
7244 tempitem.wpn2=wSWORDSLASH;
7245 break;
7246
7247 case iWSword:
7248 tempitem.power=2;
7249 tempitem.flags|= ITEM_FLAG4 |ITEM_FLAG2;
7250 tempitem.wpn=tempitem.wpn3=wWSWORD;
7251 tempitem.wpn2=wWSWORDSLASH;
7252 break;
7253
7254 case iMSword:
7255 tempitem.power=4;
7256 tempitem.flags|= ITEM_FLAG4 |ITEM_FLAG2;
7257 tempitem.wpn=tempitem.wpn3=wMSWORD;
7258 tempitem.wpn2=wMSWORDSLASH;
7259 break;
7260
7261 case iXSword:
7262 tempitem.power=8;
7263 tempitem.flags|= ITEM_FLAG4 |ITEM_FLAG2;
7264 tempitem.wpn=tempitem.wpn3=wXSWORD;
7265 tempitem.wpn2=wXSWORDSLASH;
7266 break;
7267
7268 case iNayrusLove:
7269 tempitem.flags |= get_bit(deprecated_rules,76) ? ITEM_FLAG1 : 0;
7270 tempitem.flags |= get_bit(deprecated_rules,75) ? ITEM_FLAG2 : 0;
7271 tempitem.wpn=wNAYRUSLOVE1A;
7272 tempitem.wpn2=wNAYRUSLOVE1B;
7273 tempitem.wpn3=wNAYRUSLOVES1A;
7274 tempitem.wpn4=wNAYRUSLOVES1B;
7275 tempitem.wpn6=wNAYRUSLOVE2A;
7276 tempitem.wpn7=wNAYRUSLOVE2B;
7277 tempitem.wpn8=wNAYRUSLOVES2A;
7278 tempitem.wpn9=wNAYRUSLOVES2B;
7279 tempitem.wpn5 = iwNayrusLoveShieldFront;
7280 tempitem.wpn10 = iwNayrusLoveShieldBack;
7281 tempitem.misc1=512;
7282 tempitem.cost_amount[0]=64;
7283 break;
7284
7285 case iLens:
7286 tempitem.misc1=60;
7287 tempitem.flags |= get_bit(quest_rules,qr_ENABLEMAGIC) ? 0 : ITEM_RUPEE_MAGIC;
7288 tempitem.cost_amount[0] = get_bit(quest_rules,qr_ENABLEMAGIC) ? 2 : 1;
7289 break;
7290
7291 case iArrow:
7292 tempitem.power=2;
7293 tempitem.wpn=wARROW;
7294 break;
7295
7296 case iHoverBoots:
7297 tempitem.misc1=45;
7298 tempitem.wpn=iwHover;
7299 break;
7300
7301 case iDinsFire:
7302 tempitem.power=8;
7303 tempitem.wpn=wDINSFIRE1A;
7304 tempitem.wpn2=wDINSFIRE1B;
7305 tempitem.wpn3=wDINSFIRES1A;
7306 tempitem.wpn4=wDINSFIRES1B;
7307 tempitem.misc1 = 32;
7308 tempitem.misc2 = 200;
7309 tempitem.cost_amount[0]=32;
7310 break;
7311
7312 case iFaroresWind:
7313 tempitem.cost_amount[0]=32;
7314 break;
7315
7316 case iHookshot:
7317 tempitem.power=0;
7318 tempitem.flags&=~ITEM_FLAG1;
7319 tempitem.wpn=wHSHEAD;
7320 tempitem.wpn2=wHSCHAIN_H;
7321 tempitem.wpn4=wHSHANDLE;
7322 tempitem.wpn3=wHSCHAIN_V;
7323 tempitem.misc1=50;
7324 tempitem.misc2=100;
7325 break;
7326
7327 case iLongshot:
7328 tempitem.power=0;
7329 tempitem.flags&=~ITEM_FLAG1;
7330 tempitem.wpn=wLSHEAD;
7331 tempitem.wpn2=wLSCHAIN_H;
7332 tempitem.wpn4=wLSHANDLE;
7333 tempitem.wpn3=wLSCHAIN_V;
7334 tempitem.misc1=99;
7335 tempitem.misc2=100;
7336 break;
7337
7338 case iHammer:
7339 tempitem.power=4;
7340 tempitem.wpn=wHAMMER;
7341 tempitem.wpn2=iwHammerSmack;
7342 break;
7343
7344 case iCByrna:
7345 tempitem.power=1;
7346 tempitem.wpn=wCBYRNA;
7347 tempitem.wpn2=wCBYRNASLASH;
7348 tempitem.wpn3=wCBYRNAORB;
7349 tempitem.misc1=4;
7350 tempitem.misc2=16;
7351 tempitem.misc3=1;
7352 tempitem.cost_amount[0]=1;
7353 break;
7354
7355 case iWhistle:
7356 tempitem.wpn=wWIND;
7357 tempitem.misc1=3;
7358 tempitem.flags|=ITEM_FLAG1;
7359 break;
7360
7361 case iBRing:
7362 tempitem.power=2;
7363 tempitem.misc1=spBLUE;
7364 break;
7365
7366 case iRRing:
7367 tempitem.power=4;
7368 tempitem.misc1=spRED;
7369 break;
7370
7371 case iGRing:
7372 tempitem.power=8;
7373 tempitem.misc1=spGOLD;
7374 break;
7375
7376 case iSpinScroll:
7377 tempitem.power = 2;
7378 tempitem.misc1 = 1;
7379 break;
7380
7381 case iL2SpinScroll:
7382 tempitem.family=itype_spinscroll2;
7383 tempitem.fam_type=1;
7384 tempitem.cost_amount[0]=8;
7385 tempitem.power=2;
7386 tempitem.misc1 = 20;
7387 break;
7388
7389 case iQuakeScroll:
7390 tempitem.misc1=0x10;
7391 tempitem.misc2=64;
7392 break;
7393
7394 case iL2QuakeScroll:
7395 tempitem.family=itype_quakescroll2;
7396 tempitem.fam_type=1;
7397 tempitem.power = 2;
7398 tempitem.misc1=0x20;
7399 tempitem.misc2=192;
7400 tempitem.cost_amount[0]=8;
7401 break;
7402
7403 case iChargeRing:
7404 tempitem.misc1=64;
7405 tempitem.misc2=128;
7406 break;
7407
7408 case iL2ChargeRing:
7409 tempitem.misc1=32;
7410 tempitem.misc2=64;
7411 break;
7412
7413 case iOldGlove:
7414 tempitem.flags |= ITEM_FLAG1;
7415
7416 //fallthrough
7417 case iBombBagL4:
7418 case iWalletL3:
7419 case iQuiverL4:
7420 case iBracelet:
7421 tempitem.power = 1;
7422 break;
7423
7424 case iL2Bracelet:
7425 tempitem.power = 2;
7426 break;
7427
7428 case iMKey:
7429 tempitem.power=0xFF;
7430 tempitem.flags |= ITEM_FLAG1;
7431 break;
7432 }
7433 }
7434
7435
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 7)
7436 {
7437 switch(i)
7438 {
7439 case iStoneAgony:
7440 case iStompBoots:
7441 case iPerilRing:
7442 case iWhimsicalRing:
7443 {
7444 reset_itembuf(&tempitem, i);
7445 strcpy(item_string[i],old_item_string[i]);
7446 break;
7447 }
7448 }
7449 }
7450
7451
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 8) // May 2007: Some corrections.
7452 {
7453 switch(i)
7454 {
7455 case iMShield:
7456 tempitem.misc1|=shFLAME;
7457 tempitem.misc2|=shFIREBALL|shMAGIC;
7458
7459 if(get_bit(quest_rules, qr_SWORDMIRROR))
7460 {
7461 tempitem.misc2 |= shSWORD;
7462 }
7463
7464 // fallthrough
7465 case iShield:
7466 tempitem.misc1|=shFIREBALL|shSWORD|shMAGIC;
7467
7468 // fallthrough
7469 case iSShield:
7470 tempitem.misc1|=shROCK|shARROW|shBRANG|shSCRIPT;
7471
7472 if(get_bit(deprecated_rules,102)) //qr_REFLECTROCKS
7473 {
7474 tempitem.misc2 |= shROCK;
7475 }
7476
7477 break;
7478
7479 case iWhispRing:
7480 tempitem.power=1;
7481 tempitem.flags|=ITEM_GAMEDATA|ITEM_FLAG1;
7482 tempitem.misc1 = 3;
7483 break;
7484
7485 case iL2WhispRing:
7486 tempitem.power=0;
7487 tempitem.flags|=ITEM_GAMEDATA|ITEM_FLAG1;
7488 tempitem.misc1 = 3;
7489 break;
7490
7491 case iL2Ladder:
7492 case iBow:
7493 case iCByrna:
7494 tempitem.power = 1;
7495 break;
7496 }
7497 }
7498
7499
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
16128 if(s_version < 9 && i==iClock)
7500 {
7501 tempitem.misc1 = get_bit(deprecated_rules, qr_TEMPCLOCKS_DEP) ? 256 : 0;
7502 }
7503
7504 //add the misc flag for bomb
7505
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
16128 if(s_version < 10 && tempitem.family == itype_bomb)
7506 {
7507 tempitem.flags = (tempitem.flags & ~ITEM_FLAG1) | (get_bit(quest_rules, qr_LONGBOMBBOOM_DEP) ? ITEM_FLAG1 : 0);
7508 }
7509
7510
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
16128 if(s_version < 11 && tempitem.family == itype_triforcepiece)
7511 {
7512 tempitem.flags = (tempitem.fam_type ? ITEM_GAMEDATA : 0);
7513 tempitem.playsound = (tempitem.fam_type ? WAV_SCALE : WAV_CLEARED);
7514 }
7515
7516
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 12) // June 2007: More Misc. attributes.
7517 {
7518 switch(i)
7519 {
7520 case iFBrang:
7521 tempitem.misc4 |= shFIREBALL|shSWORD|shMAGIC;
7522
7523 //fallthrough
7524 case iMBrang:
7525 tempitem.misc3 |= shSWORD|shMAGIC;
7526
7527 //fallthrough
7528 case iHookshot:
7529 case iLongshot:
7530 //fallthrough
7531 tempitem.misc3 |= shFIREBALL;
7532
7533 case iBrang:
7534 tempitem.misc3 |= shBRANG|shROCK|shARROW;
7535 break;
7536 }
7537
7538 switch(tempitem.family)
7539 {
7540 case itype_hoverboots:
7541 tempitem.usesound = WAV_ZN1HOVER;
7542 break;
7543
7544 case itype_wand:
7545 case itype_book:
7546 tempitem.usesound = WAV_WAND;
7547 break;
7548
7549 case itype_arrow:
7550 tempitem.usesound = WAV_ARROW;
7551 break;
7552
7553 case itype_hookshot:
7554 tempitem.usesound = WAV_HOOKSHOT;
7555 break;
7556
7557 case itype_brang:
7558 tempitem.usesound = WAV_BRANG;
7559 break;
7560
7561 case itype_shield:
7562 tempitem.usesound = WAV_CHINK;
7563 break;
7564
7565 case itype_sword:
7566 tempitem.usesound = WAV_SWORD;
7567 break;
7568
7569 case itype_whistle:
7570 tempitem.usesound = WAV_WHISTLE;
7571 break;
7572
7573 case itype_hammer:
7574 tempitem.usesound = WAV_HAMMER;
7575 break;
7576
7577 case itype_dinsfire:
7578 tempitem.usesound = WAV_ZN1DINSFIRE;
7579 break;
7580
7581 case itype_faroreswind:
7582 tempitem.usesound = WAV_ZN1FARORESWIND;
7583 break;
7584
7585 case itype_nayruslove:
7586 tempitem.usesound = WAV_ZN1NAYRUSLOVE1;
7587 break;
7588
7589 case itype_bomb:
7590 case itype_sbomb:
7591 case itype_quakescroll:
7592 case itype_quakescroll2:
7593 tempitem.usesound = WAV_BOMB;
7594 break;
7595
7596 case itype_spinscroll:
7597 case itype_spinscroll2:
7598 tempitem.usesound = WAV_ZN1SPINATTACK;
7599 break;
7600 }
7601 }
7602
7603
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 13) // July 2007
7604 {
7605 if(tempitem.family == itype_whistle)
7606 {
7607 tempitem.misc1 = (tempitem.power==2 ? 4 : 3);
7608 tempitem.power = 1;
7609 tempitem.flags|=ITEM_FLAG1;
7610 }
7611 else if(tempitem.family == itype_wand)
7612 tempitem.flags|=ITEM_FLAG1;
7613 else if(tempitem.family == itype_book)
7614 {
7615 tempitem.flags|=ITEM_FLAG1;
7616 tempitem.power = 2;
7617 }
7618 }
7619
7620
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 14) // August 2007
7621 {
7622 if(tempitem.family == itype_fairy)
7623 {
7624 tempitem.usesound = WAV_SCALE;
7625
7626 if(tempitem.fam_type)
7627 tempitem.misc3=50;
7628 }
7629 else if(tempitem.family == itype_potion)
7630 {
7631 tempitem.flags |= ITEM_GAINOLD;
7632 }
7633 }
7634
7635
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 17) // November 2007
7636 {
7637 if(tempitem.family == itype_candle && !tempitem.wpn3)
7638 {
7639 tempitem.wpn3 = wFIRE;
7640 }
7641 else if(tempitem.family == itype_arrow && tempitem.power>4)
7642 {
7643 tempitem.flags|=ITEM_FLAG1;
7644 }
7645 }
7646
7647
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 18) // New Year's Eve 2007
7648 {
7649 if(tempitem.family == itype_whistle)
7650 tempitem.misc2 = 8; // Use the Whistle warp ring
7651 else if(tempitem.family == itype_bait)
7652 tempitem.misc1 = 768; // Frames until it goes
7653 else if(tempitem.family == itype_triforcepiece)
7654 {
7655 if(tempitem.flags & ITEM_GAMEDATA)
7656 {
7657 tempitem.misc2 = 1; // Cutscene 1
7658 tempitem.flags |= ITEM_FLAG1; // Side Warp Out
7659 }
7660 }
7661 }
7662
7663
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 19) // January 2008
7664 {
7665 if(tempitem.family == itype_nayruslove)
7666 {
7667 tempitem.flags |= get_bit(deprecated_rules,qr_NOBOMBPALFLASH+1)?ITEM_FLAG3:0;
7668 tempitem.flags |= get_bit(deprecated_rules,qr_NOBOMBPALFLASH+2)?ITEM_FLAG4:0;
7669 }
7670 }
7671
7672
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 20) // October 2008
7673 {
7674 if(tempitem.family == itype_nayruslove)
7675 {
7676 tempitem.wpn6=wNAYRUSLOVE2A;
7677 tempitem.wpn7=wNAYRUSLOVE2B;
7678 tempitem.wpn8=wNAYRUSLOVES2A;
7679 tempitem.wpn9=wNAYRUSLOVES2B;
7680 tempitem.wpn5 = iwNayrusLoveShieldFront;
7681 tempitem.wpn10 = iwNayrusLoveShieldBack;
7682 }
7683 }
7684
7685
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 21) // November 2008
7686 {
7687 if(tempitem.flags & 0x0100) // ITEM_SLASH
7688 {
7689 tempitem.flags &= ~0x0100;
7690
7691 if(tempitem.family == itype_sword ||
7692 tempitem.family == itype_wand ||
7693 tempitem.family == itype_candle ||
7694 tempitem.family == itype_cbyrna)
7695 {
7696 tempitem.flags |= ITEM_FLAG4;
7697 }
7698 }
7699 }
7700
7701
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 22) // September 2009
7702 {
7703 if(tempitem.family == itype_sbomb || tempitem.family == itype_bomb)
7704 {
7705 tempitem.misc3 = tempitem.power/2;
7706 }
7707 }
7708
7709
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 23) // March 2011
7710 {
7711 if(tempitem.family == itype_dinsfire)
7712 tempitem.wpn5 = wFIRE;
7713 else if(tempitem.family == itype_book)
7714 tempitem.wpn2 = wFIRE;
7715 }
7716
7717 // Version 25: Bomb bags were acting as though "super bombs also" was checked
7718 // whether it was or not, and a lot of existing quests depended on the
7719 // incorrect behavior.
7720
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 25) // January 2012
7721 {
7722 if(tempitem.family == itype_bombbag)
7723 tempitem.flags |= 16;
7724
7725 if(tempitem.family == itype_dinsfire)
7726 tempitem.flags |= ITEM_FLAG3; // Sideview gravity flag
7727 }
7728
7729
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if( version < 0x254) //Nuke greyed-out flags/values from <=2.53, in case they are used in 2.54/2.55
7730 {
7731
60/60
✓ Branch 0 taken 1359 times.
✓ Branch 1 taken 636 times.
✓ Branch 2 taken 177 times.
✓ Branch 3 taken 761 times.
✓ Branch 4 taken 1625 times.
✓ Branch 5 taken 5140 times.
✓ Branch 6 taken 177 times.
✓ Branch 7 taken 177 times.
✓ Branch 8 taken 151 times.
✓ Branch 9 taken 105 times.
✓ Branch 10 taken 59 times.
✓ Branch 11 taken 118 times.
✓ Branch 12 taken 118 times.
✓ Branch 13 taken 69 times.
✓ Branch 14 taken 177 times.
✓ Branch 15 taken 177 times.
✓ Branch 16 taken 118 times.
✓ Branch 17 taken 177 times.
✓ Branch 18 taken 118 times.
✓ Branch 19 taken 59 times.
✓ Branch 20 taken 118 times.
✓ Branch 21 taken 69 times.
✓ Branch 22 taken 59 times.
✓ Branch 23 taken 177 times.
✓ Branch 24 taken 59 times.
✓ Branch 25 taken 59 times.
✓ Branch 26 taken 118 times.
✓ Branch 27 taken 59 times.
✓ Branch 28 taken 59 times.
✓ Branch 29 taken 59 times.
✓ Branch 30 taken 59 times.
✓ Branch 31 taken 59 times.
✓ Branch 32 taken 69 times.
✓ Branch 33 taken 59 times.
✓ Branch 34 taken 59 times.
✓ Branch 35 taken 59 times.
✓ Branch 36 taken 59 times.
✓ Branch 37 taken 118 times.
✓ Branch 38 taken 236 times.
✓ Branch 39 taken 59 times.
✓ Branch 40 taken 59 times.
✓ Branch 41 taken 105 times.
✓ Branch 42 taken 236 times.
✓ Branch 43 taken 59 times.
✓ Branch 44 taken 59 times.
✓ Branch 45 taken 59 times.
✓ Branch 46 taken 59 times.
✓ Branch 47 taken 59 times.
✓ Branch 48 taken 118 times.
✓ Branch 49 taken 118 times.
✓ Branch 50 taken 59 times.
✓ Branch 51 taken 177 times.
✓ Branch 52 taken 177 times.
✓ Branch 53 taken 236 times.
✓ Branch 54 taken 59 times.
✓ Branch 55 taken 59 times.
✓ Branch 56 taken 59 times.
✓ Branch 57 taken 59 times.
✓ Branch 58 taken 59 times.
✓ Branch 59 taken 59 times.
15104 switch(tempitem.family)
7732 {
7733 case itype_sword:
7734 {
7735 5140 tempitem.flags &= ~(ITEM_FLAG5);
7736 5140 tempitem.misc3 = 0;
7737 5140 tempitem.misc4 = 0;
7738 5140 tempitem.misc5 = 0;
7739 5140 tempitem.misc6 = 0;
7740 5140 tempitem.misc7 = 0;
7741 5140 tempitem.misc8 = 0;
7742 5140 tempitem.misc9 = 0;
7743 5140 tempitem.misc10 = 0;
7744 5140 tempitem.wpn4 = 0;
7745 5140 tempitem.wpn5 = 0;
7746 5140 tempitem.wpn6 = 0;
7747 5140 tempitem.wpn7 = 0;
7748 5140 tempitem.wpn8 = 0;
7749 5140 tempitem.wpn9 = 0;
7750 5140 tempitem.wpn10 = 0;
7751 5140 break;
7752 }
7753 case itype_brang:
7754 {
7755 177 tempitem.flags &= ~(ITEM_FLAG4 | ITEM_FLAG5);
7756 177 tempitem.misc2 = 0;
7757 177 tempitem.misc5 = 0;
7758 177 tempitem.misc6 = 0;
7759 177 tempitem.misc7 = 0;
7760 177 tempitem.misc8 = 0;
7761 177 tempitem.misc9 = 0;
7762 177 tempitem.misc10 = 0;
7763 177 tempitem.wpn4 = 0;
7764 177 tempitem.wpn5 = 0;
7765 177 tempitem.wpn6 = 0;
7766 177 tempitem.wpn7 = 0;
7767 177 tempitem.wpn8 = 0;
7768 177 tempitem.wpn9 = 0;
7769 177 tempitem.wpn10 = 0;
7770 177 break;
7771 }
7772 case itype_arrow:
7773 {
7774 177 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7775 177 tempitem.misc2 = 0;
7776 177 tempitem.misc3 = 0;
7777 177 tempitem.misc4 = 0;
7778 177 tempitem.misc5 = 0;
7779 177 tempitem.misc6 = 0;
7780 177 tempitem.misc7 = 0;
7781 177 tempitem.misc8 = 0;
7782 177 tempitem.misc9 = 0;
7783 177 tempitem.misc10 = 0;
7784 177 tempitem.wpn4 = 0;
7785 177 tempitem.wpn5 = 0;
7786 177 tempitem.wpn6 = 0;
7787 177 tempitem.wpn7 = 0;
7788 177 tempitem.wpn8 = 0;
7789 177 tempitem.wpn9 = 0;
7790 177 tempitem.wpn10 = 0;
7791 177 break;
7792 }
7793 case itype_candle:
7794 {
7795 151 tempitem.flags &= ~ (ITEM_FLAG3 | ITEM_FLAG5);
7796 151 tempitem.misc1 = 0;
7797 151 tempitem.misc2 = 0;
7798 151 tempitem.misc3 = 0;
7799 151 tempitem.misc4 = 0;
7800 151 tempitem.misc5 = 0;
7801 151 tempitem.misc6 = 0;
7802 151 tempitem.misc7 = 0;
7803 151 tempitem.misc8 = 0;
7804 151 tempitem.misc9 = 0;
7805 151 tempitem.misc10 = 0;
7806 151 tempitem.wpn4 = 0;
7807 151 tempitem.wpn5 = 0;
7808 151 tempitem.wpn6 = 0;
7809 151 tempitem.wpn7 = 0;
7810 151 tempitem.wpn8 = 0;
7811 151 tempitem.wpn9 = 0;
7812 151 tempitem.wpn10 = 0;
7813 151 break;
7814 }
7815 case itype_whistle:
7816 {
7817 105 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7818 105 tempitem.misc3 = 0;
7819 105 tempitem.misc4 = 0;
7820 105 tempitem.misc5 = 0;
7821 105 tempitem.misc6 = 0;
7822 105 tempitem.misc7 = 0;
7823 105 tempitem.misc8 = 0;
7824 105 tempitem.misc9 = 0;
7825 105 tempitem.misc10 = 0;
7826 105 tempitem.wpn2 = 0;
7827 105 tempitem.wpn3 = 0;
7828 105 tempitem.wpn4 = 0;
7829 105 tempitem.wpn5 = 0;
7830 105 tempitem.wpn6 = 0;
7831 105 tempitem.wpn7 = 0;
7832 105 tempitem.wpn8 = 0;
7833 105 tempitem.wpn9 = 0;
7834 105 tempitem.wpn10 = 0;
7835 105 break;
7836 }
7837 case itype_bait:
7838 {
7839 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7840 59 tempitem.misc2 = 0;
7841 59 tempitem.misc3 = 0;
7842 59 tempitem.misc4 = 0;
7843 59 tempitem.misc5 = 0;
7844 59 tempitem.misc6 = 0;
7845 59 tempitem.misc7 = 0;
7846 59 tempitem.misc8 = 0;
7847 59 tempitem.misc9 = 0;
7848 59 tempitem.misc10 = 0;
7849 59 tempitem.wpn2 = 0;
7850 59 tempitem.wpn3 = 0;
7851 59 tempitem.wpn4 = 0;
7852 59 tempitem.wpn5 = 0;
7853 59 tempitem.wpn6 = 0;
7854 59 tempitem.wpn7 = 0;
7855 59 tempitem.wpn8 = 0;
7856 59 tempitem.wpn9 = 0;
7857 59 tempitem.wpn10 = 0;
7858 59 break;
7859 }
7860 case itype_letter:
7861 {
7862 118 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7863 118 tempitem.misc1 = 0;
7864 118 tempitem.misc2 = 0;
7865 118 tempitem.misc3 = 0;
7866 118 tempitem.misc4 = 0;
7867 118 tempitem.misc5 = 0;
7868 118 tempitem.misc6 = 0;
7869 118 tempitem.misc7 = 0;
7870 118 tempitem.misc8 = 0;
7871 118 tempitem.misc9 = 0;
7872 118 tempitem.misc10 = 0;
7873 118 tempitem.wpn = 0;
7874 118 tempitem.wpn2 = 0;
7875 118 tempitem.wpn3 = 0;
7876 118 tempitem.wpn4 = 0;
7877 118 tempitem.wpn5 = 0;
7878 118 tempitem.wpn6 = 0;
7879 118 tempitem.wpn7 = 0;
7880 118 tempitem.wpn8 = 0;
7881 118 tempitem.wpn9 = 0;
7882 118 tempitem.wpn10 = 0;
7883 118 break;
7884 }
7885 case itype_potion:
7886 {
7887 118 tempitem.flags &= ~ (ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7888 118 tempitem.misc3 = 0;
7889 118 tempitem.misc4 = 0;
7890 118 tempitem.misc5 = 0;
7891 118 tempitem.misc6 = 0;
7892 118 tempitem.misc7 = 0;
7893 118 tempitem.misc8 = 0;
7894 118 tempitem.misc9 = 0;
7895 118 tempitem.misc10 = 0;
7896 118 tempitem.wpn = 0;
7897 118 tempitem.wpn2 = 0;
7898 118 tempitem.wpn3 = 0;
7899 118 tempitem.wpn4 = 0;
7900 118 tempitem.wpn5 = 0;
7901 118 tempitem.wpn6 = 0;
7902 118 tempitem.wpn7 = 0;
7903 118 tempitem.wpn8 = 0;
7904 118 tempitem.wpn9 = 0;
7905 118 tempitem.wpn10 = 0;
7906 118 break;
7907 }
7908 case itype_wand:
7909 {
7910 69 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG5);
7911 69 tempitem.misc1 = 0;
7912 69 tempitem.misc2 = 0;
7913 69 tempitem.misc3 = 0;
7914 69 tempitem.misc4 = 0;
7915 69 tempitem.misc5 = 0;
7916 69 tempitem.misc6 = 0;
7917 69 tempitem.misc7 = 0;
7918 69 tempitem.misc8 = 0;
7919 69 tempitem.misc9 = 0;
7920 69 tempitem.misc10 = 0;
7921 69 tempitem.wpn4 = 0;
7922 69 tempitem.wpn5 = 0;
7923 69 tempitem.wpn6 = 0;
7924 69 tempitem.wpn7 = 0;
7925 69 tempitem.wpn8 = 0;
7926 69 tempitem.wpn9 = 0;
7927 69 tempitem.wpn10 = 0;
7928 69 break;
7929 }
7930 case itype_ring:
7931 {
7932 177 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7933 177 tempitem.misc2 = 0;
7934 177 tempitem.misc3 = 0;
7935 177 tempitem.misc4 = 0;
7936 177 tempitem.misc5 = 0;
7937 177 tempitem.misc6 = 0;
7938 177 tempitem.misc7 = 0;
7939 177 tempitem.misc8 = 0;
7940 177 tempitem.misc9 = 0;
7941 177 tempitem.misc10 = 0;
7942 177 tempitem.wpn = 0;
7943 177 tempitem.wpn2 = 0;
7944 177 tempitem.wpn3 = 0;
7945 177 tempitem.wpn4 = 0;
7946 177 tempitem.wpn5 = 0;
7947 177 tempitem.wpn6 = 0;
7948 177 tempitem.wpn7 = 0;
7949 177 tempitem.wpn8 = 0;
7950 177 tempitem.wpn9 = 0;
7951 177 tempitem.wpn10 = 0;
7952 177 break;
7953 }
7954 case itype_wallet:
7955 {
7956 177 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7957 177 tempitem.misc3 = 0;
7958 177 tempitem.misc4 = 0;
7959 177 tempitem.misc5 = 0;
7960 177 tempitem.misc6 = 0;
7961 177 tempitem.misc7 = 0;
7962 177 tempitem.misc8 = 0;
7963 177 tempitem.misc9 = 0;
7964 177 tempitem.misc10 = 0;
7965 177 tempitem.wpn = 0;
7966 177 tempitem.wpn2 = 0;
7967 177 tempitem.wpn3 = 0;
7968 177 tempitem.wpn4 = 0;
7969 177 tempitem.wpn5 = 0;
7970 177 tempitem.wpn6 = 0;
7971 177 tempitem.wpn7 = 0;
7972 177 tempitem.wpn8 = 0;
7973 177 tempitem.wpn9 = 0;
7974 177 tempitem.wpn10 = 0;
7975 177 break;
7976 }
7977 case itype_amulet:
7978 {
7979 118 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
7980 118 tempitem.misc1 = 0;
7981 118 tempitem.misc2 = 0;
7982 118 tempitem.misc3 = 0;
7983 118 tempitem.misc4 = 0;
7984 118 tempitem.misc5 = 0;
7985 118 tempitem.misc6 = 0;
7986 118 tempitem.misc7 = 0;
7987 118 tempitem.misc8 = 0;
7988 118 tempitem.misc9 = 0;
7989 118 tempitem.misc10 = 0;
7990 118 tempitem.wpn = 0;
7991 118 tempitem.wpn2 = 0;
7992 118 tempitem.wpn3 = 0;
7993 118 tempitem.wpn4 = 0;
7994 118 tempitem.wpn5 = 0;
7995 118 tempitem.wpn6 = 0;
7996 118 tempitem.wpn7 = 0;
7997 118 tempitem.wpn8 = 0;
7998 118 tempitem.wpn9 = 0;
7999 118 tempitem.wpn10 = 0;
8000 118 break;
8001 }
8002 case itype_shield:
8003 {
8004 177 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8005 177 tempitem.misc3 = 0;
8006 177 tempitem.misc4 = 0;
8007 177 tempitem.misc5 = 0;
8008 177 tempitem.misc6 = 0;
8009 177 tempitem.misc7 = 0;
8010 177 tempitem.misc8 = 0;
8011 177 tempitem.misc9 = 0;
8012 177 tempitem.misc10 = 0;
8013 177 tempitem.wpn = 0;
8014 177 tempitem.wpn2 = 0;
8015 177 tempitem.wpn3 = 0;
8016 177 tempitem.wpn4 = 0;
8017 177 tempitem.wpn5 = 0;
8018 177 tempitem.wpn6 = 0;
8019 177 tempitem.wpn7 = 0;
8020 177 tempitem.wpn8 = 0;
8021 177 tempitem.wpn9 = 0;
8022 177 tempitem.wpn10 = 0;
8023 177 break;
8024 }
8025 case itype_bow:
8026 {
8027 118 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8028 118 tempitem.misc1 = 0;
8029 118 tempitem.misc2 = 0;
8030 118 tempitem.misc3 = 0;
8031 118 tempitem.misc4 = 0;
8032 118 tempitem.misc5 = 0;
8033 118 tempitem.misc6 = 0;
8034 118 tempitem.misc7 = 0;
8035 118 tempitem.misc8 = 0;
8036 118 tempitem.misc9 = 0;
8037 118 tempitem.misc10 = 0;
8038 118 tempitem.wpn = 0;
8039 118 tempitem.wpn2 = 0;
8040 118 tempitem.wpn3 = 0;
8041 118 tempitem.wpn4 = 0;
8042 118 tempitem.wpn5 = 0;
8043 118 tempitem.wpn6 = 0;
8044 118 tempitem.wpn7 = 0;
8045 118 tempitem.wpn8 = 0;
8046 118 tempitem.wpn9 = 0;
8047 118 tempitem.wpn10 = 0;
8048 118 break;
8049 }
8050 case itype_raft:
8051 {
8052 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8053 59 tempitem.misc1 = 0;
8054 59 tempitem.misc2 = 0;
8055 59 tempitem.misc3 = 0;
8056 59 tempitem.misc4 = 0;
8057 59 tempitem.misc5 = 0;
8058 59 tempitem.misc6 = 0;
8059 59 tempitem.misc7 = 0;
8060 59 tempitem.misc8 = 0;
8061 59 tempitem.misc9 = 0;
8062 59 tempitem.misc10 = 0;
8063 59 tempitem.wpn = 0;
8064 59 tempitem.wpn2 = 0;
8065 59 tempitem.wpn3 = 0;
8066 59 tempitem.wpn4 = 0;
8067 59 tempitem.wpn5 = 0;
8068 59 tempitem.wpn6 = 0;
8069 59 tempitem.wpn7 = 0;
8070 59 tempitem.wpn8 = 0;
8071 59 tempitem.wpn9 = 0;
8072 59 tempitem.wpn10 = 0;
8073 59 break;
8074 }
8075 case itype_ladder:
8076 {
8077 118 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8078 118 tempitem.misc1 = 0;
8079 118 tempitem.misc2 = 0;
8080 118 tempitem.misc3 = 0;
8081 118 tempitem.misc4 = 0;
8082 118 tempitem.misc5 = 0;
8083 118 tempitem.misc6 = 0;
8084 118 tempitem.misc7 = 0;
8085 118 tempitem.misc8 = 0;
8086 118 tempitem.misc9 = 0;
8087 118 tempitem.misc10 = 0;
8088 118 tempitem.wpn = 0;
8089 118 tempitem.wpn2 = 0;
8090 118 tempitem.wpn3 = 0;
8091 118 tempitem.wpn4 = 0;
8092 118 tempitem.wpn5 = 0;
8093 118 tempitem.wpn6 = 0;
8094 118 tempitem.wpn7 = 0;
8095 118 tempitem.wpn8 = 0;
8096 118 tempitem.wpn9 = 0;
8097 118 tempitem.wpn10 = 0;
8098 118 break;
8099 }
8100 case itype_book:
8101 {
8102 69 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8103 69 tempitem.misc1 = 0;
8104 69 tempitem.misc2 = 0;
8105 69 tempitem.misc3 = 0;
8106 69 tempitem.misc4 = 0;
8107 69 tempitem.misc5 = 0;
8108 69 tempitem.misc6 = 0;
8109 69 tempitem.misc7 = 0;
8110 69 tempitem.misc8 = 0;
8111 69 tempitem.misc9 = 0;
8112 69 tempitem.misc10 = 0;
8113 69 tempitem.wpn3 = 0;
8114 69 tempitem.wpn4 = 0;
8115 69 tempitem.wpn5 = 0;
8116 69 tempitem.wpn6 = 0;
8117 69 tempitem.wpn7 = 0;
8118 69 tempitem.wpn8 = 0;
8119 69 tempitem.wpn9 = 0;
8120 69 tempitem.wpn10 = 0;
8121 69 break;
8122 }
8123 case itype_magickey:
8124 {
8125 59 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8126 59 tempitem.misc1 = 0;
8127 59 tempitem.misc2 = 0;
8128 59 tempitem.misc3 = 0;
8129 59 tempitem.misc4 = 0;
8130 59 tempitem.misc5 = 0;
8131 59 tempitem.misc6 = 0;
8132 59 tempitem.misc7 = 0;
8133 59 tempitem.misc8 = 0;
8134 59 tempitem.misc9 = 0;
8135 59 tempitem.misc10 = 0;
8136 59 tempitem.wpn = 0;
8137 59 tempitem.wpn2 = 0;
8138 59 tempitem.wpn3 = 0;
8139 59 tempitem.wpn4 = 0;
8140 59 tempitem.wpn5 = 0;
8141 59 tempitem.wpn6 = 0;
8142 59 tempitem.wpn7 = 0;
8143 59 tempitem.wpn8 = 0;
8144 59 tempitem.wpn9 = 0;
8145 59 tempitem.wpn10 = 0;
8146 59 break;
8147 }
8148 case itype_bracelet:
8149 {
8150 177 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8151 177 tempitem.misc1 = 0;
8152 177 tempitem.misc2 = 0;
8153 177 tempitem.misc3 = 0;
8154 177 tempitem.misc4 = 0;
8155 177 tempitem.misc5 = 0;
8156 177 tempitem.misc6 = 0;
8157 177 tempitem.misc7 = 0;
8158 177 tempitem.misc8 = 0;
8159 177 tempitem.misc9 = 0;
8160 177 tempitem.misc10 = 0;
8161 177 tempitem.wpn = 0;
8162 177 tempitem.wpn2 = 0;
8163 177 tempitem.wpn3 = 0;
8164 177 tempitem.wpn4 = 0;
8165 177 tempitem.wpn5 = 0;
8166 177 tempitem.wpn6 = 0;
8167 177 tempitem.wpn7 = 0;
8168 177 tempitem.wpn8 = 0;
8169 177 tempitem.wpn9 = 0;
8170 177 tempitem.wpn10 = 0;
8171 177 break;
8172 }
8173 case itype_flippers:
8174 {
8175 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8176 59 tempitem.misc1 = 0;
8177 59 tempitem.misc2 = 0;
8178 59 tempitem.misc3 = 0;
8179 59 tempitem.misc4 = 0;
8180 59 tempitem.misc5 = 0;
8181 59 tempitem.misc6 = 0;
8182 59 tempitem.misc7 = 0;
8183 59 tempitem.misc8 = 0;
8184 59 tempitem.misc9 = 0;
8185 59 tempitem.misc10 = 0;
8186 59 tempitem.wpn = 0;
8187 59 tempitem.wpn2 = 0;
8188 59 tempitem.wpn3 = 0;
8189 59 tempitem.wpn4 = 0;
8190 59 tempitem.wpn5 = 0;
8191 59 tempitem.wpn6 = 0;
8192 59 tempitem.wpn7 = 0;
8193 59 tempitem.wpn8 = 0;
8194 59 tempitem.wpn9 = 0;
8195 59 tempitem.wpn10 = 0;
8196 59 break;
8197 }
8198 case itype_boots:
8199 {
8200 59 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8201 59 tempitem.misc1 = 0;
8202 59 tempitem.misc2 = 0;
8203 59 tempitem.misc3 = 0;
8204 59 tempitem.misc4 = 0;
8205 59 tempitem.misc5 = 0;
8206 59 tempitem.misc6 = 0;
8207 59 tempitem.misc7 = 0;
8208 59 tempitem.misc8 = 0;
8209 59 tempitem.misc9 = 0;
8210 59 tempitem.misc10 = 0;
8211 59 tempitem.wpn = 0;
8212 59 tempitem.wpn2 = 0;
8213 59 tempitem.wpn3 = 0;
8214 59 tempitem.wpn4 = 0;
8215 59 tempitem.wpn5 = 0;
8216 59 tempitem.wpn6 = 0;
8217 59 tempitem.wpn7 = 0;
8218 59 tempitem.wpn8 = 0;
8219 59 tempitem.wpn9 = 0;
8220 59 tempitem.wpn10 = 0;
8221 59 break;
8222 }
8223 case itype_hookshot:
8224 {
8225 118 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8226 118 tempitem.misc5 = 0;
8227 118 tempitem.misc6 = 0;
8228 118 tempitem.misc7 = 0;
8229 118 tempitem.misc8 = 0;
8230 118 tempitem.misc9 = 0;
8231 118 tempitem.misc10 = 0;
8232 118 tempitem.wpn5 = 0;
8233 118 tempitem.wpn6 = 0;
8234 118 tempitem.wpn7 = 0;
8235 118 tempitem.wpn8 = 0;
8236 118 tempitem.wpn9 = 0;
8237 118 tempitem.wpn10 = 0;
8238 118 break;
8239 }
8240 case itype_lens:
8241 {
8242 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8243 59 tempitem.misc2 = 0;
8244 59 tempitem.misc3 = 0;
8245 59 tempitem.misc4 = 0;
8246 59 tempitem.misc5 = 0;
8247 59 tempitem.misc6 = 0;
8248 59 tempitem.misc7 = 0;
8249 59 tempitem.misc8 = 0;
8250 59 tempitem.misc9 = 0;
8251 59 tempitem.misc10 = 0;
8252 59 tempitem.wpn = 0;
8253 59 tempitem.wpn2 = 0;
8254 59 tempitem.wpn3 = 0;
8255 59 tempitem.wpn4 = 0;
8256 59 tempitem.wpn5 = 0;
8257 59 tempitem.wpn6 = 0;
8258 59 tempitem.wpn7 = 0;
8259 59 tempitem.wpn8 = 0;
8260 59 tempitem.wpn9 = 0;
8261 59 tempitem.wpn10 = 0;
8262 59 break;
8263 }
8264 case itype_hammer:
8265 {
8266 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8267 59 tempitem.misc1 = 0;
8268 59 tempitem.misc2 = 0;
8269 59 tempitem.misc3 = 0;
8270 59 tempitem.misc4 = 0;
8271 59 tempitem.misc5 = 0;
8272 59 tempitem.misc6 = 0;
8273 59 tempitem.misc7 = 0;
8274 59 tempitem.misc8 = 0;
8275 59 tempitem.misc9 = 0;
8276 59 tempitem.misc10 = 0;
8277 59 tempitem.wpn3 = 0;
8278 59 tempitem.wpn4 = 0;
8279 59 tempitem.wpn5 = 0;
8280 59 tempitem.wpn6 = 0;
8281 59 tempitem.wpn7 = 0;
8282 59 tempitem.wpn8 = 0;
8283 59 tempitem.wpn9 = 0;
8284 59 tempitem.wpn10 = 0;
8285 59 break;
8286 }
8287 case itype_dinsfire:
8288 {
8289 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG4 | ITEM_FLAG5);
8290 59 tempitem.misc3 = 0;
8291 59 tempitem.misc4 = 0;
8292 59 tempitem.misc5 = 0;
8293 59 tempitem.misc6 = 0;
8294 59 tempitem.misc7 = 0;
8295 59 tempitem.misc8 = 0;
8296 59 tempitem.misc9 = 0;
8297 59 tempitem.misc10 = 0;
8298 59 tempitem.wpn6 = 0;
8299 59 tempitem.wpn7 = 0;
8300 59 tempitem.wpn8 = 0;
8301 59 tempitem.wpn9 = 0;
8302 59 tempitem.wpn10 = 0;
8303 59 break;
8304 }
8305 case itype_faroreswind:
8306 {
8307 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8308 59 tempitem.misc2 = 0;
8309 59 tempitem.misc3 = 0;
8310 59 tempitem.misc4 = 0;
8311 59 tempitem.misc5 = 0;
8312 59 tempitem.misc6 = 0;
8313 59 tempitem.misc7 = 0;
8314 59 tempitem.misc8 = 0;
8315 59 tempitem.misc9 = 0;
8316 59 tempitem.misc10 = 0;
8317 59 tempitem.wpn = 0;
8318 59 tempitem.wpn2 = 0;
8319 59 tempitem.wpn3 = 0;
8320 59 tempitem.wpn4 = 0;
8321 59 tempitem.wpn5 = 0;
8322 59 tempitem.wpn6 = 0;
8323 59 tempitem.wpn7 = 0;
8324 59 tempitem.wpn8 = 0;
8325 59 tempitem.wpn9 = 0;
8326 59 tempitem.wpn10 = 0;
8327 59 break;
8328 }
8329 case itype_nayruslove:
8330 {
8331 59 tempitem.flags &= ~ (ITEM_FLAG5);
8332 59 tempitem.misc2 = 0;
8333 59 tempitem.misc3 = 0;
8334 59 tempitem.misc4 = 0;
8335 59 tempitem.misc5 = 0;
8336 59 tempitem.misc6 = 0;
8337 59 tempitem.misc7 = 0;
8338 59 tempitem.misc8 = 0;
8339 59 tempitem.misc9 = 0;
8340 59 tempitem.misc10 = 0;
8341 59 break;
8342 }
8343 case itype_bomb:
8344 {
8345 69 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8346 69 tempitem.misc4 = 0;
8347 69 tempitem.misc5 = 0;
8348 69 tempitem.misc6 = 0;
8349 69 tempitem.misc7 = 0;
8350 69 tempitem.misc8 = 0;
8351 69 tempitem.misc9 = 0;
8352 69 tempitem.misc10 = 0;
8353 69 tempitem.wpn3 = 0;
8354 69 tempitem.wpn4 = 0;
8355 69 tempitem.wpn5 = 0;
8356 69 tempitem.wpn6 = 0;
8357 69 tempitem.wpn7 = 0;
8358 69 tempitem.wpn8 = 0;
8359 69 tempitem.wpn9 = 0;
8360 69 tempitem.wpn10 = 0;
8361 69 break;
8362 }
8363 case itype_sbomb:
8364 {
8365 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8366 59 tempitem.misc4 = 0;
8367 59 tempitem.misc5 = 0;
8368 59 tempitem.misc6 = 0;
8369 59 tempitem.misc7 = 0;
8370 59 tempitem.misc8 = 0;
8371 59 tempitem.misc9 = 0;
8372 59 tempitem.misc10 = 0;
8373 59 tempitem.wpn3 = 0;
8374 59 tempitem.wpn4 = 0;
8375 59 tempitem.wpn5 = 0;
8376 59 tempitem.wpn6 = 0;
8377 59 tempitem.wpn7 = 0;
8378 59 tempitem.wpn8 = 0;
8379 59 tempitem.wpn9 = 0;
8380 59 tempitem.wpn10 = 0;
8381 59 break;
8382 }
8383 case itype_clock:
8384 {
8385 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8386 59 tempitem.misc2 = 0;
8387 59 tempitem.misc3 = 0;
8388 59 tempitem.misc4 = 0;
8389 59 tempitem.misc5 = 0;
8390 59 tempitem.misc6 = 0;
8391 59 tempitem.misc7 = 0;
8392 59 tempitem.misc8 = 0;
8393 59 tempitem.misc9 = 0;
8394 59 tempitem.misc10 = 0;
8395 59 tempitem.wpn = 0;
8396 59 tempitem.wpn2 = 0;
8397 59 tempitem.wpn3 = 0;
8398 59 tempitem.wpn4 = 0;
8399 59 tempitem.wpn5 = 0;
8400 59 tempitem.wpn6 = 0;
8401 59 tempitem.wpn7 = 0;
8402 59 tempitem.wpn8 = 0;
8403 59 tempitem.wpn9 = 0;
8404 59 tempitem.wpn10 = 0;
8405 59 break;
8406 }
8407 case itype_key:
8408 {
8409 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8410 59 tempitem.misc1 = 0;
8411 59 tempitem.misc2 = 0;
8412 59 tempitem.misc3 = 0;
8413 59 tempitem.misc4 = 0;
8414 59 tempitem.misc5 = 0;
8415 59 tempitem.misc6 = 0;
8416 59 tempitem.misc7 = 0;
8417 59 tempitem.misc8 = 0;
8418 59 tempitem.misc9 = 0;
8419 59 tempitem.misc10 = 0;
8420 59 tempitem.wpn = 0;
8421 59 tempitem.wpn2 = 0;
8422 59 tempitem.wpn3 = 0;
8423 59 tempitem.wpn4 = 0;
8424 59 tempitem.wpn5 = 0;
8425 59 tempitem.wpn6 = 0;
8426 59 tempitem.wpn7 = 0;
8427 59 tempitem.wpn8 = 0;
8428 59 tempitem.wpn9 = 0;
8429 59 tempitem.wpn10 = 0;
8430 59 break;
8431 }
8432 case itype_magiccontainer:
8433 {
8434 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8435 59 tempitem.misc1 = 0;
8436 59 tempitem.misc2 = 0;
8437 59 tempitem.misc3 = 0;
8438 59 tempitem.misc4 = 0;
8439 59 tempitem.misc5 = 0;
8440 59 tempitem.misc6 = 0;
8441 59 tempitem.misc7 = 0;
8442 59 tempitem.misc8 = 0;
8443 59 tempitem.misc9 = 0;
8444 59 tempitem.misc10 = 0;
8445 59 tempitem.wpn = 0;
8446 59 tempitem.wpn2 = 0;
8447 59 tempitem.wpn3 = 0;
8448 59 tempitem.wpn4 = 0;
8449 59 tempitem.wpn5 = 0;
8450 59 tempitem.wpn6 = 0;
8451 59 tempitem.wpn7 = 0;
8452 59 tempitem.wpn8 = 0;
8453 59 tempitem.wpn9 = 0;
8454 59 tempitem.wpn10 = 0;
8455 59 break;
8456 }
8457 case itype_triforcepiece:
8458 {
8459 118 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8460 118 tempitem.misc3 = 0;
8461 118 tempitem.misc4 = 0;
8462 118 tempitem.misc5 = 0;
8463 118 tempitem.misc6 = 0;
8464 118 tempitem.misc7 = 0;
8465 118 tempitem.misc8 = 0;
8466 118 tempitem.misc9 = 0;
8467 118 tempitem.misc10 = 0;
8468 118 tempitem.wpn = 0;
8469 118 tempitem.wpn2 = 0;
8470 118 tempitem.wpn3 = 0;
8471 118 tempitem.wpn4 = 0;
8472 118 tempitem.wpn5 = 0;
8473 118 tempitem.wpn6 = 0;
8474 118 tempitem.wpn7 = 0;
8475 118 tempitem.wpn8 = 0;
8476 118 tempitem.wpn9 = 0;
8477 118 tempitem.wpn10 = 0;
8478 118 break;
8479 }
8480 case itype_map: case itype_compass: case itype_bosskey:
8481 {
8482 177 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8483 177 tempitem.misc1 = 0;
8484 177 tempitem.misc2 = 0;
8485 177 tempitem.misc3 = 0;
8486 177 tempitem.misc4 = 0;
8487 177 tempitem.misc5 = 0;
8488 177 tempitem.misc6 = 0;
8489 177 tempitem.misc7 = 0;
8490 177 tempitem.misc8 = 0;
8491 177 tempitem.misc9 = 0;
8492 177 tempitem.misc10 = 0;
8493 177 tempitem.wpn = 0;
8494 177 tempitem.wpn2 = 0;
8495 177 tempitem.wpn3 = 0;
8496 177 tempitem.wpn4 = 0;
8497 177 tempitem.wpn5 = 0;
8498 177 tempitem.wpn6 = 0;
8499 177 tempitem.wpn7 = 0;
8500 177 tempitem.wpn8 = 0;
8501 177 tempitem.wpn9 = 0;
8502 177 tempitem.wpn10 = 0;
8503 177 break;
8504 }
8505 case itype_quiver:
8506 {
8507 236 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8508 236 tempitem.misc3 = 0;
8509 236 tempitem.misc4 = 0;
8510 236 tempitem.misc5 = 0;
8511 236 tempitem.misc6 = 0;
8512 236 tempitem.misc7 = 0;
8513 236 tempitem.misc8 = 0;
8514 236 tempitem.misc9 = 0;
8515 236 tempitem.misc10 = 0;
8516 236 tempitem.wpn = 0;
8517 236 tempitem.wpn2 = 0;
8518 236 tempitem.wpn3 = 0;
8519 236 tempitem.wpn4 = 0;
8520 236 tempitem.wpn5 = 0;
8521 236 tempitem.wpn6 = 0;
8522 236 tempitem.wpn7 = 0;
8523 236 tempitem.wpn8 = 0;
8524 236 tempitem.wpn9 = 0;
8525 236 tempitem.wpn10 = 0;
8526 236 break;
8527 }
8528 case itype_lkey:
8529 {
8530 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8531 59 tempitem.misc1 = 0;
8532 59 tempitem.misc2 = 0;
8533 59 tempitem.misc3 = 0;
8534 59 tempitem.misc4 = 0;
8535 59 tempitem.misc5 = 0;
8536 59 tempitem.misc6 = 0;
8537 59 tempitem.misc7 = 0;
8538 59 tempitem.misc8 = 0;
8539 59 tempitem.misc9 = 0;
8540 59 tempitem.misc10 = 0;
8541 59 tempitem.wpn = 0;
8542 59 tempitem.wpn2 = 0;
8543 59 tempitem.wpn3 = 0;
8544 59 tempitem.wpn4 = 0;
8545 59 tempitem.wpn5 = 0;
8546 59 tempitem.wpn6 = 0;
8547 59 tempitem.wpn7 = 0;
8548 59 tempitem.wpn8 = 0;
8549 59 tempitem.wpn9 = 0;
8550 59 tempitem.wpn10 = 0;
8551 59 break;
8552 }
8553 case itype_cbyrna:
8554 {
8555 59 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG5);
8556 59 tempitem.misc4 = 0;
8557 59 tempitem.misc5 = 0;
8558 59 tempitem.misc6 = 0;
8559 59 tempitem.misc7 = 0;
8560 59 tempitem.misc8 = 0;
8561 59 tempitem.misc9 = 0;
8562 59 tempitem.misc10 = 0;
8563 59 tempitem.wpn6 = 0;
8564 59 tempitem.wpn7 = 0;
8565 59 tempitem.wpn8 = 0;
8566 59 tempitem.wpn9 = 0;
8567 59 tempitem.wpn10 = 0;
8568 59 break;
8569 }
8570 case itype_rupee: case itype_arrowammo:
8571 {
8572 761 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8573 761 tempitem.misc1 = 0;
8574 761 tempitem.misc2 = 0;
8575 761 tempitem.misc3 = 0;
8576 761 tempitem.misc4 = 0;
8577 761 tempitem.misc5 = 0;
8578 761 tempitem.misc6 = 0;
8579 761 tempitem.misc7 = 0;
8580 761 tempitem.misc8 = 0;
8581 761 tempitem.misc9 = 0;
8582 761 tempitem.misc10 = 0;
8583 761 tempitem.wpn = 0;
8584 761 tempitem.wpn2 = 0;
8585 761 tempitem.wpn3 = 0;
8586 761 tempitem.wpn4 = 0;
8587 761 tempitem.wpn5 = 0;
8588 761 tempitem.wpn6 = 0;
8589 761 tempitem.wpn7 = 0;
8590 761 tempitem.wpn8 = 0;
8591 761 tempitem.wpn9 = 0;
8592 761 tempitem.wpn10 = 0;
8593 761 break;
8594 }
8595 case itype_fairy:
8596 {
8597 105 tempitem.flags &= ~ (ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8598 105 tempitem.misc4 = 0;
8599 105 tempitem.misc5 = 0;
8600 105 tempitem.misc6 = 0;
8601 105 tempitem.misc7 = 0;
8602 105 tempitem.misc8 = 0;
8603 105 tempitem.misc9 = 0;
8604 105 tempitem.misc10 = 0;
8605 105 tempitem.wpn = 0;
8606 105 tempitem.wpn2 = 0;
8607 105 tempitem.wpn3 = 0;
8608 105 tempitem.wpn4 = 0;
8609 105 tempitem.wpn5 = 0;
8610 105 tempitem.wpn6 = 0;
8611 105 tempitem.wpn7 = 0;
8612 105 tempitem.wpn8 = 0;
8613 105 tempitem.wpn9 = 0;
8614 105 tempitem.wpn10 = 0;
8615 105 break;
8616 }
8617 case itype_magic: case itype_heart: case itype_heartcontainer: case itype_heartpiece: case itype_killem: case itype_bombammo:
8618 {
8619 636 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8620 636 tempitem.misc1 = 0;
8621 636 tempitem.misc2 = 0;
8622 636 tempitem.misc3 = 0;
8623 636 tempitem.misc4 = 0;
8624 636 tempitem.misc5 = 0;
8625 636 tempitem.misc6 = 0;
8626 636 tempitem.misc7 = 0;
8627 636 tempitem.misc8 = 0;
8628 636 tempitem.misc9 = 0;
8629 636 tempitem.misc10 = 0;
8630 636 tempitem.wpn = 0;
8631 636 tempitem.wpn2 = 0;
8632 636 tempitem.wpn3 = 0;
8633 636 tempitem.wpn4 = 0;
8634 636 tempitem.wpn5 = 0;
8635 636 tempitem.wpn6 = 0;
8636 636 tempitem.wpn7 = 0;
8637 636 tempitem.wpn8 = 0;
8638 636 tempitem.wpn9 = 0;
8639 636 tempitem.wpn10 = 0;
8640 636 break;
8641 }
8642 case itype_bombbag:
8643 {
8644 236 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8645 236 tempitem.misc3 = 0;
8646 236 tempitem.misc4 = 0;
8647 236 tempitem.misc5 = 0;
8648 236 tempitem.misc6 = 0;
8649 236 tempitem.misc7 = 0;
8650 236 tempitem.misc8 = 0;
8651 236 tempitem.misc9 = 0;
8652 236 tempitem.misc10 = 0;
8653 236 tempitem.wpn = 0;
8654 236 tempitem.wpn2 = 0;
8655 236 tempitem.wpn3 = 0;
8656 236 tempitem.wpn4 = 0;
8657 236 tempitem.wpn5 = 0;
8658 236 tempitem.wpn6 = 0;
8659 236 tempitem.wpn7 = 0;
8660 236 tempitem.wpn8 = 0;
8661 236 tempitem.wpn9 = 0;
8662 236 tempitem.wpn10 = 0;
8663 236 break;
8664 }
8665 case itype_rocs:
8666 {
8667 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8668 59 tempitem.misc1 = 0;
8669 59 tempitem.misc2 = 0;
8670 59 tempitem.misc3 = 0;
8671 59 tempitem.misc4 = 0;
8672 59 tempitem.misc5 = 0;
8673 59 tempitem.misc6 = 0;
8674 59 tempitem.misc7 = 0;
8675 59 tempitem.misc8 = 0;
8676 59 tempitem.misc9 = 0;
8677 59 tempitem.misc10 = 0;
8678 59 tempitem.wpn = 0;
8679 59 tempitem.wpn2 = 0;
8680 59 tempitem.wpn3 = 0;
8681 59 tempitem.wpn4 = 0;
8682 59 tempitem.wpn5 = 0;
8683 59 tempitem.wpn6 = 0;
8684 59 tempitem.wpn7 = 0;
8685 59 tempitem.wpn8 = 0;
8686 59 tempitem.wpn9 = 0;
8687 59 tempitem.wpn10 = 0;
8688 59 break;
8689 }
8690 case itype_hoverboots:
8691 {
8692 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8693 59 tempitem.misc2 = 0;
8694 59 tempitem.misc3 = 0;
8695 59 tempitem.misc4 = 0;
8696 59 tempitem.misc5 = 0;
8697 59 tempitem.misc6 = 0;
8698 59 tempitem.misc7 = 0;
8699 59 tempitem.misc8 = 0;
8700 59 tempitem.misc9 = 0;
8701 59 tempitem.misc10 = 0;
8702 59 tempitem.wpn2 = 0;
8703 59 tempitem.wpn3 = 0;
8704 59 tempitem.wpn4 = 0;
8705 59 tempitem.wpn5 = 0;
8706 59 tempitem.wpn6 = 0;
8707 59 tempitem.wpn7 = 0;
8708 59 tempitem.wpn8 = 0;
8709 59 tempitem.wpn9 = 0;
8710 59 tempitem.wpn10 = 0;
8711 59 break;
8712 }
8713 case itype_spinscroll:
8714 {
8715 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8716 59 tempitem.misc2 = 0;
8717 59 tempitem.misc3 = 0;
8718 59 tempitem.misc4 = 0;
8719 59 tempitem.misc5 = 0;
8720 59 tempitem.misc6 = 0;
8721 59 tempitem.misc7 = 0;
8722 59 tempitem.misc8 = 0;
8723 59 tempitem.misc9 = 0;
8724 59 tempitem.misc10 = 0;
8725 59 tempitem.wpn = 0;
8726 59 tempitem.wpn2 = 0;
8727 59 tempitem.wpn3 = 0;
8728 59 tempitem.wpn4 = 0;
8729 59 tempitem.wpn5 = 0;
8730 59 tempitem.wpn6 = 0;
8731 59 tempitem.wpn7 = 0;
8732 59 tempitem.wpn8 = 0;
8733 59 tempitem.wpn9 = 0;
8734 59 tempitem.wpn10 = 0;
8735 59 break;
8736 }
8737 case itype_crossscroll:
8738 {
8739 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8740 59 tempitem.misc1 = 0;
8741 59 tempitem.misc2 = 0;
8742 59 tempitem.misc3 = 0;
8743 59 tempitem.misc4 = 0;
8744 59 tempitem.misc5 = 0;
8745 59 tempitem.misc6 = 0;
8746 59 tempitem.misc7 = 0;
8747 59 tempitem.misc8 = 0;
8748 59 tempitem.misc9 = 0;
8749 59 tempitem.misc10 = 0;
8750 59 tempitem.wpn = 0;
8751 59 tempitem.wpn2 = 0;
8752 59 tempitem.wpn3 = 0;
8753 59 tempitem.wpn4 = 0;
8754 59 tempitem.wpn5 = 0;
8755 59 tempitem.wpn6 = 0;
8756 59 tempitem.wpn7 = 0;
8757 59 tempitem.wpn8 = 0;
8758 59 tempitem.wpn9 = 0;
8759 59 tempitem.wpn10 = 0;
8760 59 break;
8761 }
8762 case itype_quakescroll:
8763 {
8764 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8765 59 tempitem.misc3 = 0;
8766 59 tempitem.misc4 = 0;
8767 59 tempitem.misc5 = 0;
8768 59 tempitem.misc6 = 0;
8769 59 tempitem.misc7 = 0;
8770 59 tempitem.misc8 = 0;
8771 59 tempitem.misc9 = 0;
8772 59 tempitem.misc10 = 0;
8773 59 tempitem.wpn = 0;
8774 59 tempitem.wpn2 = 0;
8775 59 tempitem.wpn3 = 0;
8776 59 tempitem.wpn4 = 0;
8777 59 tempitem.wpn5 = 0;
8778 59 tempitem.wpn6 = 0;
8779 59 tempitem.wpn7 = 0;
8780 59 tempitem.wpn8 = 0;
8781 59 tempitem.wpn9 = 0;
8782 59 tempitem.wpn10 = 0;
8783 59 break;
8784 }
8785 case itype_whispring:
8786 {
8787 118 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8788 118 tempitem.misc2 = 0;
8789 118 tempitem.misc3 = 0;
8790 118 tempitem.misc4 = 0;
8791 118 tempitem.misc5 = 0;
8792 118 tempitem.misc6 = 0;
8793 118 tempitem.misc7 = 0;
8794 118 tempitem.misc8 = 0;
8795 118 tempitem.misc9 = 0;
8796 118 tempitem.misc10 = 0;
8797 118 tempitem.wpn = 0;
8798 118 tempitem.wpn2 = 0;
8799 118 tempitem.wpn3 = 0;
8800 118 tempitem.wpn4 = 0;
8801 118 tempitem.wpn5 = 0;
8802 118 tempitem.wpn6 = 0;
8803 118 tempitem.wpn7 = 0;
8804 118 tempitem.wpn8 = 0;
8805 118 tempitem.wpn9 = 0;
8806 118 tempitem.wpn10 = 0;
8807 118 break;
8808 }
8809 case itype_chargering:
8810 {
8811 118 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8812 118 tempitem.misc3 = 0;
8813 118 tempitem.misc4 = 0;
8814 118 tempitem.misc5 = 0;
8815 118 tempitem.misc6 = 0;
8816 118 tempitem.misc7 = 0;
8817 118 tempitem.misc8 = 0;
8818 118 tempitem.misc9 = 0;
8819 118 tempitem.misc10 = 0;
8820 118 tempitem.wpn = 0;
8821 118 tempitem.wpn2 = 0;
8822 118 tempitem.wpn3 = 0;
8823 118 tempitem.wpn4 = 0;
8824 118 tempitem.wpn5 = 0;
8825 118 tempitem.wpn6 = 0;
8826 118 tempitem.wpn7 = 0;
8827 118 tempitem.wpn8 = 0;
8828 118 tempitem.wpn9 = 0;
8829 118 tempitem.wpn10 = 0;
8830 118 break;
8831 }
8832 case itype_perilscroll:
8833 {
8834 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8835 59 tempitem.misc2 = 0;
8836 59 tempitem.misc3 = 0;
8837 59 tempitem.misc4 = 0;
8838 59 tempitem.misc5 = 0;
8839 59 tempitem.misc6 = 0;
8840 59 tempitem.misc7 = 0;
8841 59 tempitem.misc8 = 0;
8842 59 tempitem.misc9 = 0;
8843 59 tempitem.misc10 = 0;
8844 59 tempitem.wpn = 0;
8845 59 tempitem.wpn2 = 0;
8846 59 tempitem.wpn3 = 0;
8847 59 tempitem.wpn4 = 0;
8848 59 tempitem.wpn5 = 0;
8849 59 tempitem.wpn6 = 0;
8850 59 tempitem.wpn7 = 0;
8851 59 tempitem.wpn8 = 0;
8852 59 tempitem.wpn9 = 0;
8853 59 tempitem.wpn10 = 0;
8854 59 break;
8855 }
8856 case itype_wealthmedal:
8857 {
8858 177 tempitem.flags &= ~ (ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8859 177 tempitem.misc2 = 0;
8860 177 tempitem.misc3 = 0;
8861 177 tempitem.misc4 = 0;
8862 177 tempitem.misc5 = 0;
8863 177 tempitem.misc6 = 0;
8864 177 tempitem.misc7 = 0;
8865 177 tempitem.misc8 = 0;
8866 177 tempitem.misc9 = 0;
8867 177 tempitem.misc10 = 0;
8868 177 tempitem.wpn = 0;
8869 177 tempitem.wpn2 = 0;
8870 177 tempitem.wpn3 = 0;
8871 177 tempitem.wpn4 = 0;
8872 177 tempitem.wpn5 = 0;
8873 177 tempitem.wpn6 = 0;
8874 177 tempitem.wpn7 = 0;
8875 177 tempitem.wpn8 = 0;
8876 177 tempitem.wpn9 = 0;
8877 177 tempitem.wpn10 = 0;
8878 177 break;
8879 }
8880 case itype_heartring:
8881 {
8882 177 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8883 177 tempitem.misc3 = 0;
8884 177 tempitem.misc4 = 0;
8885 177 tempitem.misc5 = 0;
8886 177 tempitem.misc6 = 0;
8887 177 tempitem.misc7 = 0;
8888 177 tempitem.misc8 = 0;
8889 177 tempitem.misc9 = 0;
8890 177 tempitem.misc10 = 0;
8891 177 tempitem.wpn = 0;
8892 177 tempitem.wpn2 = 0;
8893 177 tempitem.wpn3 = 0;
8894 177 tempitem.wpn4 = 0;
8895 177 tempitem.wpn5 = 0;
8896 177 tempitem.wpn6 = 0;
8897 177 tempitem.wpn7 = 0;
8898 177 tempitem.wpn8 = 0;
8899 177 tempitem.wpn9 = 0;
8900 177 tempitem.wpn10 = 0;
8901 177 break;
8902 }
8903 case itype_magicring:
8904 {
8905 236 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8906 236 tempitem.misc3 = 0;
8907 236 tempitem.misc4 = 0;
8908 236 tempitem.misc5 = 0;
8909 236 tempitem.misc6 = 0;
8910 236 tempitem.misc7 = 0;
8911 236 tempitem.misc8 = 0;
8912 236 tempitem.misc9 = 0;
8913 236 tempitem.misc10 = 0;
8914 236 tempitem.wpn = 0;
8915 236 tempitem.wpn2 = 0;
8916 236 tempitem.wpn3 = 0;
8917 236 tempitem.wpn4 = 0;
8918 236 tempitem.wpn5 = 0;
8919 236 tempitem.wpn6 = 0;
8920 236 tempitem.wpn7 = 0;
8921 236 tempitem.wpn8 = 0;
8922 236 tempitem.wpn9 = 0;
8923 236 tempitem.wpn10 = 0;
8924 236 break;
8925 }
8926 case itype_spinscroll2:
8927 {
8928 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8929 59 tempitem.misc2 = 0;
8930 59 tempitem.misc3 = 0;
8931 59 tempitem.misc4 = 0;
8932 59 tempitem.misc5 = 0;
8933 59 tempitem.misc6 = 0;
8934 59 tempitem.misc7 = 0;
8935 59 tempitem.misc8 = 0;
8936 59 tempitem.misc9 = 0;
8937 59 tempitem.misc10 = 0;
8938 59 tempitem.wpn = 0;
8939 59 tempitem.wpn2 = 0;
8940 59 tempitem.wpn3 = 0;
8941 59 tempitem.wpn4 = 0;
8942 59 tempitem.wpn5 = 0;
8943 59 tempitem.wpn6 = 0;
8944 59 tempitem.wpn7 = 0;
8945 59 tempitem.wpn8 = 0;
8946 59 tempitem.wpn9 = 0;
8947 59 tempitem.wpn10 = 0;
8948 59 break;
8949 }
8950 case itype_quakescroll2:
8951 {
8952 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8953 59 tempitem.misc3 = 0;
8954 59 tempitem.misc4 = 0;
8955 59 tempitem.misc5 = 0;
8956 59 tempitem.misc6 = 0;
8957 59 tempitem.misc7 = 0;
8958 59 tempitem.misc8 = 0;
8959 59 tempitem.misc9 = 0;
8960 59 tempitem.misc10 = 0;
8961 59 tempitem.wpn = 0;
8962 59 tempitem.wpn2 = 0;
8963 59 tempitem.wpn3 = 0;
8964 59 tempitem.wpn4 = 0;
8965 59 tempitem.wpn5 = 0;
8966 59 tempitem.wpn6 = 0;
8967 59 tempitem.wpn7 = 0;
8968 59 tempitem.wpn8 = 0;
8969 59 tempitem.wpn9 = 0;
8970 59 tempitem.wpn10 = 0;
8971 59 break;
8972 }
8973 case itype_agony:
8974 {
8975 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
8976 59 tempitem.misc2 = 0;
8977 59 tempitem.misc3 = 0;
8978 59 tempitem.misc4 = 0;
8979 59 tempitem.misc5 = 0;
8980 59 tempitem.misc6 = 0;
8981 59 tempitem.misc7 = 0;
8982 59 tempitem.misc8 = 0;
8983 59 tempitem.misc9 = 0;
8984 59 tempitem.misc10 = 0;
8985 59 tempitem.wpn = 0;
8986 59 tempitem.wpn2 = 0;
8987 59 tempitem.wpn3 = 0;
8988 59 tempitem.wpn4 = 0;
8989 59 tempitem.wpn5 = 0;
8990 59 tempitem.wpn6 = 0;
8991 59 tempitem.wpn7 = 0;
8992 59 tempitem.wpn8 = 0;
8993 59 tempitem.wpn9 = 0;
8994 59 tempitem.wpn10 = 0;
8995 59 break;
8996 }
8997 case itype_stompboots:
8998 {
8999 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
9000 59 tempitem.misc1 = 0;
9001 59 tempitem.misc2 = 0;
9002 59 tempitem.misc3 = 0;
9003 59 tempitem.misc4 = 0;
9004 59 tempitem.misc5 = 0;
9005 59 tempitem.misc6 = 0;
9006 59 tempitem.misc7 = 0;
9007 59 tempitem.misc8 = 0;
9008 59 tempitem.misc9 = 0;
9009 59 tempitem.misc10 = 0;
9010 59 tempitem.wpn = 0;
9011 59 tempitem.wpn2 = 0;
9012 59 tempitem.wpn3 = 0;
9013 59 tempitem.wpn4 = 0;
9014 59 tempitem.wpn5 = 0;
9015 59 tempitem.wpn6 = 0;
9016 59 tempitem.wpn7 = 0;
9017 59 tempitem.wpn8 = 0;
9018 59 tempitem.wpn9 = 0;
9019 59 tempitem.wpn10 = 0;
9020 59 break;
9021 }
9022 case itype_whimsicalring:
9023 {
9024 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
9025 59 tempitem.misc2 = 0;
9026 59 tempitem.misc3 = 0;
9027 59 tempitem.misc4 = 0;
9028 59 tempitem.misc5 = 0;
9029 59 tempitem.misc6 = 0;
9030 59 tempitem.misc7 = 0;
9031 59 tempitem.misc8 = 0;
9032 59 tempitem.misc9 = 0;
9033 59 tempitem.misc10 = 0;
9034 59 tempitem.wpn = 0;
9035 59 tempitem.wpn2 = 0;
9036 59 tempitem.wpn3 = 0;
9037 59 tempitem.wpn4 = 0;
9038 59 tempitem.wpn5 = 0;
9039 59 tempitem.wpn6 = 0;
9040 59 tempitem.wpn7 = 0;
9041 59 tempitem.wpn8 = 0;
9042 59 tempitem.wpn9 = 0;
9043 59 tempitem.wpn10 = 0;
9044 59 break;
9045 }
9046 case itype_perilring:
9047 {
9048 59 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
9049 59 tempitem.misc2 = 0;
9050 59 tempitem.misc3 = 0;
9051 59 tempitem.misc4 = 0;
9052 59 tempitem.misc5 = 0;
9053 59 tempitem.misc6 = 0;
9054 59 tempitem.misc7 = 0;
9055 59 tempitem.misc8 = 0;
9056 59 tempitem.misc9 = 0;
9057 59 tempitem.misc10 = 0;
9058 59 tempitem.wpn = 0;
9059 59 tempitem.wpn2 = 0;
9060 59 tempitem.wpn3 = 0;
9061 59 tempitem.wpn4 = 0;
9062 59 tempitem.wpn5 = 0;
9063 59 tempitem.wpn6 = 0;
9064 59 tempitem.wpn7 = 0;
9065 59 tempitem.wpn8 = 0;
9066 59 tempitem.wpn9 = 0;
9067 59 tempitem.wpn10 = 0;
9068 59 break;
9069 }
9070 case itype_custom1: case itype_custom2: case itype_custom3: case itype_custom4: case itype_custom5:
9071 case itype_custom6: case itype_custom7: case itype_custom8: case itype_custom9: case itype_custom10:
9072 case itype_custom11: case itype_custom12: case itype_custom13: case itype_custom14: case itype_custom15:
9073 case itype_custom16: case itype_custom17: case itype_custom18: case itype_custom19: case itype_custom20:
9074 case itype_bowandarrow: case itype_letterpotion: case itype_misc:
9075 {
9076 1359 tempitem.flags &= ~ (ITEM_FLAG1 | ITEM_FLAG2 | ITEM_FLAG3 | ITEM_FLAG4 | ITEM_FLAG5);
9077 1359 tempitem.misc1 = 0;
9078 1359 tempitem.misc2 = 0;
9079 1359 tempitem.misc3 = 0;
9080 1359 tempitem.misc4 = 0;
9081 1359 tempitem.misc5 = 0;
9082 1359 tempitem.misc6 = 0;
9083 1359 tempitem.misc7 = 0;
9084 1359 tempitem.misc8 = 0;
9085 1359 tempitem.misc9 = 0;
9086 1359 tempitem.misc10 = 0;
9087 1359 tempitem.wpn = 0;
9088 1359 tempitem.wpn2 = 0;
9089 1359 tempitem.wpn3 = 0;
9090 1359 tempitem.wpn4 = 0;
9091 1359 tempitem.wpn5 = 0;
9092 1359 tempitem.wpn6 = 0;
9093 1359 tempitem.wpn7 = 0;
9094 1359 tempitem.wpn8 = 0;
9095 1359 tempitem.wpn9 = 0;
9096 1359 tempitem.wpn10 = 0;
9097 1359 break;
9098 }
9099 }
9100 15104 }
9101 //Port quest rules to items
9102
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if( s_version <= 31)
9103 {
9104
2/2
✓ Branch 0 taken 69 times.
✓ Branch 1 taken 15035 times.
15104 if(tempitem.family == itype_bomb)
9105 {
9106
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 69 times.
69 if ( get_bit(quest_rules,qr_OUCHBOMBS) ) tempitem.flags |= ITEM_FLAG2;
9107 69 else tempitem.flags &= ~ ITEM_FLAG2;
9108 69 }
9109
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 14976 times.
15035 else if(tempitem.family == itype_sbomb)
9110 {
9111
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if ( get_bit(quest_rules,qr_OUCHBOMBS) ) tempitem.flags |= ITEM_FLAG2;
9112 59 else tempitem.flags &= ~ ITEM_FLAG2;
9113 59 }
9114
9115
2/2
✓ Branch 0 taken 177 times.
✓ Branch 1 taken 14799 times.
14976 else if(tempitem.family == itype_brang)
9116 {
9117
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 177 times.
177 if ( get_bit(quest_rules,qr_BRANGPICKUP) ) tempitem.flags |= ITEM_FLAG4;
9118 177 else tempitem.flags &= ~ ITEM_FLAG4;
9119 177 }
9120
2/2
✓ Branch 0 taken 14730 times.
✓ Branch 1 taken 69 times.
14799 else if(tempitem.family == itype_wand)
9121 {
9122
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 69 times.
69 if ( get_bit(quest_rules,qr_NOWANDMELEE) ) tempitem.flags |= ITEM_FLAG3;
9123 69 else tempitem.flags &= ~ ITEM_FLAG3;
9124 69 }
9125 15104 }
9126
9127 //Port quest rules to items
9128
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if( s_version <= 37)
9129 {
9130
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 15045 times.
15104 if(tempitem.family == itype_flippers)
9131 {
9132
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if ( (get_bit(quest_rules,qr_NODIVING)) ) tempitem.flags |= ITEM_FLAG1;
9133 59 else tempitem.flags &= ~ ITEM_FLAG1;
9134 59 }
9135
2/2
✓ Branch 0 taken 9905 times.
✓ Branch 1 taken 5140 times.
15045 else if(tempitem.family == itype_sword)
9136 {
9137
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5140 times.
5140 if ( (get_bit(quest_rules,qr_QUICKSWORD)) ) tempitem.flags |= ITEM_FLAG5;
9138 5140 else tempitem.flags &= ~ ITEM_FLAG5;
9139 5140 }
9140
2/2
✓ Branch 0 taken 69 times.
✓ Branch 1 taken 9836 times.
9905 else if(tempitem.family == itype_wand)
9141 {
9142
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 69 times.
69 if ( (get_bit(quest_rules,qr_QUICKSWORD)) ) tempitem.flags |= ITEM_FLAG5;
9143 69 else tempitem.flags &= ~ ITEM_FLAG5;
9144 69 }
9145
4/4
✓ Branch 0 taken 9767 times.
✓ Branch 1 taken 69 times.
✓ Branch 2 taken 151 times.
✓ Branch 3 taken 9616 times.
9836 else if(tempitem.family == itype_book || tempitem.family == itype_candle)
9146 {
9147 //@Emily: What was qrFIREPROOFHERO2 again, and does that also need to enable this?
9148
2/2
✓ Branch 0 taken 39 times.
✓ Branch 1 taken 181 times.
220 if ( (get_bit(quest_rules,qr_FIREPROOFHERO)) ) tempitem.flags |= ITEM_FLAG3;
9149 181 else tempitem.flags &= ~ ITEM_FLAG3;
9150 220 }
9151 15104 }
9152
9153
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if( s_version < 38)
9154 {
9155
4/4
✓ Branch 0 taken 14927 times.
✓ Branch 1 taken 177 times.
✓ Branch 2 taken 118 times.
✓ Branch 3 taken 14809 times.
15104 if(tempitem.family == itype_brang || tempitem.family == itype_hookshot)
9156 {
9157
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 295 times.
295 if(get_bit(quest_rules,qr_BRANGPICKUP)) tempitem.flags |= ITEM_FLAG4;
9158 295 else tempitem.flags &= ~ITEM_FLAG4;
9159
9160
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 295 times.
295 if(get_bit(quest_rules,qr_Z3BRANG_HSHOT)) tempitem.flags |= ITEM_FLAG5 | ITEM_FLAG6;
9161 295 else tempitem.flags &= ~(ITEM_FLAG5|ITEM_FLAG6);
9162 295 }
9163
2/2
✓ Branch 0 taken 14632 times.
✓ Branch 1 taken 177 times.
14809 else if(tempitem.family == itype_arrow)
9164 {
9165
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 177 times.
177 if(get_bit(quest_rules,qr_BRANGPICKUP)) tempitem.flags |= ITEM_FLAG4;
9166 177 else tempitem.flags &= ~ITEM_FLAG4;
9167
9168
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 177 times.
177 if(get_bit(quest_rules,qr_Z3BRANG_HSHOT)) tempitem.flags &= ~ITEM_FLAG2;
9169 177 else tempitem.flags |= ITEM_FLAG2;
9170 177 }
9171 15104 }
9172
9173
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if( s_version < 39)
9174 {
9175
6/6
✓ Branch 0 taken 15045 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 14976 times.
✓ Branch 3 taken 69 times.
✓ Branch 4 taken 151 times.
✓ Branch 5 taken 14825 times.
15104 if(tempitem.family == itype_dinsfire || tempitem.family == itype_book || tempitem.family == itype_candle)
9176 {
9177
1/2
✓ Branch 0 taken 279 times.
✗ Branch 1 not taken.
279 if(get_bit(quest_rules,qr_TEMPCANDLELIGHT)) tempitem.flags |= ITEM_FLAG5;
9178 279 else tempitem.flags &= ~ITEM_FLAG5;
9179 279 }
9180
2/2
✓ Branch 0 taken 118 times.
✓ Branch 1 taken 14707 times.
14825 else if(tempitem.family == itype_potion)
9181 {
9182
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 118 times.
118 if(get_bit(quest_rules,qr_NONBUBBLEMEDICINE))
9183 {
9184 tempitem.flags &= ~(ITEM_FLAG3|ITEM_FLAG4);
9185 }
9186 else
9187 {
9188 118 tempitem.flags |= ITEM_FLAG3;
9189
2/2
✓ Branch 0 taken 72 times.
✓ Branch 1 taken 46 times.
118 if(get_bit(quest_rules,qr_ITEMBUBBLE))tempitem.flags |= ITEM_FLAG4;
9190 46 else tempitem.flags &= ~ITEM_FLAG4;
9191 }
9192 118 }
9193
2/2
✓ Branch 0 taken 14589 times.
✓ Branch 1 taken 118 times.
14707 else if(tempitem.family == itype_triforcepiece)
9194 {
9195
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 118 times.
118 if(get_bit(quest_rules,qr_NONBUBBLETRIFORCE))
9196 {
9197 tempitem.flags |= ITEM_FLAG3;
9198 if(get_bit(quest_rules,qr_ITEMBUBBLE))tempitem.flags |= ITEM_FLAG4;
9199 else tempitem.flags &= ~ITEM_FLAG4;
9200 }
9201 else
9202 {
9203 118 tempitem.flags &= ~(ITEM_FLAG3|ITEM_FLAG4);
9204 }
9205 118 }
9206 15104 }
9207
9208
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if( s_version < 40)
9209 {
9210
4/4
✓ Branch 0 taken 14927 times.
✓ Branch 1 taken 177 times.
✓ Branch 2 taken 59 times.
✓ Branch 3 taken 14868 times.
15104 if(tempitem.family == itype_ring || tempitem.family == itype_perilring)
9211 {
9212
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 236 times.
236 if(get_bit(quest_rules,qr_RINGAFFECTDAMAGE))tempitem.flags |= ITEM_FLAG1;
9213 236 else tempitem.flags &= ~ITEM_FLAG1;
9214 236 }
9215
8/8
✓ Branch 0 taken 14717 times.
✓ Branch 1 taken 151 times.
✓ Branch 2 taken 9577 times.
✓ Branch 3 taken 5140 times.
✓ Branch 4 taken 9508 times.
✓ Branch 5 taken 69 times.
✓ Branch 6 taken 59 times.
✓ Branch 7 taken 9449 times.
14868 else if(tempitem.family == itype_candle || tempitem.family == itype_sword || tempitem.family == itype_wand || tempitem.family == itype_cbyrna)
9216 {
9217
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5419 times.
5419 if(get_bit(quest_rules,qr_SLASHFLIPFIX))tempitem.flags |= ITEM_FLAG8;
9218 5419 else tempitem.flags &= ~ITEM_FLAG8;
9219 5419 }
9220
6/6
✓ Branch 0 taken 9964 times.
✓ Branch 1 taken 5140 times.
✓ Branch 2 taken 9895 times.
✓ Branch 3 taken 69 times.
✓ Branch 4 taken 59 times.
✓ Branch 5 taken 9836 times.
15104 if(tempitem.family == itype_sword || tempitem.family == itype_wand || tempitem.family == itype_hammer)
9221 {
9222
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5268 times.
5268 if(get_bit(quest_rules,qr_NOITEMMELEE))tempitem.flags |= ITEM_FLAG7;
9223 5268 else tempitem.flags &= ~ITEM_FLAG7;
9224 5268 }
9225
2/2
✓ Branch 0 taken 9777 times.
✓ Branch 1 taken 59 times.
9836 else if(tempitem.family == itype_cbyrna)
9226 {
9227 59 tempitem.flags |= ITEM_FLAG7;
9228 59 }
9229 15104 }
9230
9231
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if( s_version < 41 )
9232 {
9233
2/2
✓ Branch 0 taken 9964 times.
✓ Branch 1 taken 5140 times.
15104 if(tempitem.family == itype_sword)
9234 {
9235
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5140 times.
5140 if(get_bit(quest_rules,qr_SWORDMIRROR))tempitem.flags |= ITEM_FLAG9;
9236 5140 else tempitem.flags &= ~ITEM_FLAG9;
9237
9238
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5140 times.
5140 if(get_bit(quest_rules,qr_SLOWCHARGINGWALK))tempitem.flags |= ITEM_FLAG10;
9239 5140 else tempitem.flags &= ~ITEM_FLAG10;
9240 5140 }
9241 15104 }
9242
9243
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if( s_version < 42 )
9244 {
9245
2/2
✓ Branch 0 taken 69 times.
✓ Branch 1 taken 15035 times.
15104 if(tempitem.family == itype_wand)
9246 {
9247
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 69 times.
69 if(get_bit(quest_rules,qr_NOWANDMELEE))tempitem.flags |= ITEM_FLAG3;
9248 69 else tempitem.flags &= ~ITEM_FLAG3;
9249
9250 69 tempitem.flags &= ~ITEM_FLAG6;
9251 69 }
9252
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 14976 times.
15035 else if(tempitem.family == itype_hammer)
9253 {
9254 59 tempitem.flags &= ~ITEM_FLAG3;
9255 59 }
9256
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 14917 times.
14976 else if(tempitem.family == itype_cbyrna)
9257 {
9258 59 tempitem.flags |= ITEM_FLAG3;
9259
9260 59 tempitem.flags &= ~ITEM_FLAG6;
9261 59 }
9262
2/2
✓ Branch 0 taken 9777 times.
✓ Branch 1 taken 5140 times.
14917 else if(tempitem.family == itype_sword)
9263 {
9264
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5140 times.
5140 if(get_bit(quest_rules,qr_MELEEMAGICCOST))tempitem.flags |= ITEM_FLAG6;
9265 5140 else tempitem.flags &= ~ITEM_FLAG6;
9266 5140 }
9267 15104 }
9268
9269
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if( s_version < 43 )
9270 {
9271
2/2
✓ Branch 0 taken 14999 times.
✓ Branch 1 taken 105 times.
15104 if(tempitem.family == itype_whistle)
9272 {
9273
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105 times.
105 if(get_bit(quest_rules,qr_WHIRLWINDMIRROR))tempitem.flags |= ITEM_FLAG3;
9274 105 else tempitem.flags &= ~ITEM_FLAG3;
9275 105 }
9276 15104 }
9277
9278
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if( s_version < 45 )
9279 {
9280
2/2
✓ Branch 0 taken 15045 times.
✓ Branch 1 taken 59 times.
15104 if(tempitem.family == itype_flippers)
9281 {
9282 59 tempitem.misc1 = 50; //Dive length, default 50 frames -V
9283 59 tempitem.misc2 = 30; //Dive cooldown, default 30 frames -V
9284 59 }
9285 15104 }
9286
9287
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if( s_version < 46 )
9288 {
9289
2/2
✓ Branch 0 taken 15045 times.
✓ Branch 1 taken 59 times.
15104 if(tempitem.family == itype_raft)
9290 {
9291 59 tempitem.misc1 = 1; //Rafting speed modifier; default 1. Negative slows, positive speeds.
9292 59 }
9293 15104 }
9294
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if ( s_version < 34 ) //! set the default counter for older quests.
9295 {
9296
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 15045 times.
15104 if ( (tempitem.flags & ITEM_RUPEE_MAGIC) )
9297 {
9298 59 tempitem.cost_counter[0] = 1;
9299 59 }
9300 else
9301 {
9302
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15045 times.
15045 if(get_bit(quest_rules,qr_ENABLEMAGIC))
9303 tempitem.cost_counter[0] = 4;
9304 else
9305 {
9306 15045 tempitem.cost_amount[0] = 0;
9307 15045 tempitem.cost_counter[0] = -1;
9308 }
9309 }
9310 15104 }
9311
9312
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if ( s_version < 35 ) //new Lens of Truth flags
9313 {
9314
2/2
✓ Branch 0 taken 15045 times.
✓ Branch 1 taken 59 times.
15104 if ( tempitem.family == itype_lens )
9315 {
9316
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if ( get_bit(quest_rules,qr_RAFTLENS) )
9317 {
9318 tempitem.flags |= ITEM_FLAG4;
9319 }
9320
2/2
✓ Branch 0 taken 23 times.
✓ Branch 1 taken 36 times.
59 if ( get_bit(quest_rules,qr_LENSHINTS) )
9321 {
9322 23 tempitem.flags |= ITEM_FLAG1;
9323 23 }
9324
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if ( get_bit(quest_rules,qr_LENSSEESENEMIES) )
9325 {
9326 tempitem.flags |= ITEM_FLAG5;
9327 }
9328 59 }
9329 15104 }
9330
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if ( s_version < 44 ) //InitD Labels and Sprite Script Data
9331 {
9332
2/2
✓ Branch 0 taken 120832 times.
✓ Branch 1 taken 15104 times.
135936 for ( int32_t q = 0; q < 8; q++ )
9333 {
9334 120832 sprintf(tempitem.initD_label[q],"InitD[%d]",q);
9335 120832 sprintf(tempitem.weapon_initD_label[q],"InitD[%d]",q);
9336 120832 sprintf(tempitem.sprite_initD_label[q],"InitD[%d]",q);
9337 120832 tempitem.sprite_initiald[q] = 0;
9338 120832 }
9339
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 15104 times.
45312 for ( int32_t q = 0; q < 2; q++ ) tempitem.sprite_initiala[q] = 0;
9340 15104 tempitem.sprite_script = 0;
9341 15104 }
9342
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if ( s_version < 47 ) //InitD Labels and Sprite Script Data
9343 {
9344 15104 tempitem.pickupflag = 0;
9345 15104 }
9346
9347
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if( s_version < 51 )
9348 {
9349
2/2
✓ Branch 0 taken 14953 times.
✓ Branch 1 taken 151 times.
15104 if( tempitem.family == itype_candle )
9350 {
9351 151 tempitem.misc4 = 50; //Step speed
9352 151 }
9353 15104 }
9354
9355
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if( s_version < 52 )
9356 {
9357
2/2
✓ Branch 0 taken 14927 times.
✓ Branch 1 taken 177 times.
15104 if( tempitem.family == itype_shield )
9358 177 tempitem.flags |= ITEM_FLAG1; //'Block Front' flag
9359 15104 }
9360
9361
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
16128 if(tempitem.fam_type==0) // Always do this
9362 tempitem.fam_type=1;
9363
9364 16128 memcpy(&itemsbuf[i], &tempitem, sizeof(itemdata));
9365 16128 }
9366 63 }
9367
9368 63 return 0;
9369 63 }
9370
9371 static bool did_init_def_items = false;
9372 32256 void init_def_items()
9373 {
9374
2/2
✓ Branch 0 taken 32244 times.
✓ Branch 1 taken 12 times.
32256 if(did_init_def_items) return;
9375 12 did_init_def_items = true;
9376 12 default_items[3].cost_counter[1] = crBOMBS;
9377 12 default_items[13].cost_counter[1] = crARROWS;
9378 12 default_items[14].cost_counter[1] = crARROWS;
9379 12 default_items[48].cost_counter[1] = crBOMBS;
9380 12 default_items[57].cost_counter[1] = crARROWS;
9381 32256 }
9382 32256 void reset_itembuf(itemdata *item, int32_t id)
9383 {
9384 32256 init_def_items();
9385
2/2
✓ Branch 0 taken 14238 times.
✓ Branch 1 taken 18018 times.
32256 if(id<iLast)
9386 {
9387 // Copy everything *EXCEPT* the tile, misc, cset, frames, speed, delay and ltm.
9388 18018 word tile = item->tile;
9389 18018 byte miscs = item->misc_flags, cset = item->csets, frames = item->frames, speed = item->speed, delay = item->delay;
9390 18018 int32_t ltm = item->ltm;
9391
9392 18018 memcpy(item,&default_items[id],sizeof(itemdata));
9393 18018 item->tile = tile;
9394 18018 item->misc_flags = miscs;
9395 18018 item->csets = cset;
9396 18018 item->frames = frames;
9397 18018 item->speed = speed;
9398 18018 item->delay = delay;
9399 18018 item->ltm = ltm;
9400 18018 }
9401 32256 }
9402
9403 3072 void reset_itemname(int32_t id)
9404 {
9405 3072 sprintf(item_string[id],"zz%03d",id);
9406
9407
2/2
✓ Branch 0 taken 1356 times.
✓ Branch 1 taken 1716 times.
3072 if(id < iLast)
9408 1716 strcpy(item_string[id],old_item_string[id]);
9409 3072 }
9410
9411 63 int32_t readweapons(PACKFILE *f, zquestheader *Header, bool keepdata)
9412 {
9413 63 word weapons_to_read=MAXWPNS;
9414 int32_t dummy;
9415 byte padding;
9416 wpndata tempweapon;
9417 63 word s_version=0, s_cversion=0;
9418
9419
9420
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(Header->zelda_version < 0x186)
9421 {
9422 weapons_to_read=64;
9423 }
9424
9425
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(Header->zelda_version < 0x185)
9426 {
9427 weapons_to_read=32;
9428 }
9429
9430
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(Header->zelda_version > 0x192)
9431 {
9432 63 weapons_to_read=0;
9433
9434 //section version info
9435
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_version,f,true))
9436 {
9437 return qe_invalid;
9438 }
9439
9440 63 FFCore.quest_format[vWeaponSprites] = s_version;
9441
9442 //al_trace("Weapons version %d\n", s_version);
9443
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_cversion,f,true))
9444 {
9445 return qe_invalid;
9446 }
9447
9448 //section size
9449
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy,f,true))
9450 {
9451 return qe_invalid;
9452 }
9453
9454 //finally... section data
9455
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&weapons_to_read,f,true))
9456 {
9457 return qe_invalid;
9458 }
9459 63 }
9460
9461
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version>2)
9462 {
9463
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<weapons_to_read; i++)
9464 {
9465 char tempname[64];
9466
9467
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!pfread(tempname, 64, f, keepdata))
9468 {
9469 return qe_invalid;
9470 }
9471
9472
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
16128 if(keepdata)
9473 {
9474 16128 strcpy(weapon_string[i], tempname);
9475 16128 }
9476 16128 }
9477
9478
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version<4)
9479 {
9480 if(keepdata)
9481 {
9482 strcpy(weapon_string[iwHover],old_weapon_string[iwHover]);
9483 strcpy(weapon_string[wFIREMAGIC],old_weapon_string[wFIREMAGIC]);
9484 }
9485 }
9486
9487
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version<5)
9488 {
9489 if(keepdata)
9490 {
9491 strcpy(weapon_string[iwQuarterHearts],old_weapon_string[iwQuarterHearts]);
9492 }
9493 }
9494
9495 /*
9496 if (s_version<6)
9497 {
9498 strcpy(weapon_string[iwSideRaft],old_weapon_string[iwSideRaft]);
9499 strcpy(weapon_string[iwSideLadder],old_weapon_string[iwSideLadder]);
9500 }
9501 */
9502 63 }
9503 else
9504 {
9505 if(keepdata)
9506 for(int32_t i=0; i<WPNCNT; i++)
9507 reset_weaponname(i);
9508 }
9509
9510
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<weapons_to_read; i++)
9511 {
9512 16128 word oldtile = 0;
9513
2/2
✓ Branch 0 taken 512 times.
✓ Branch 1 taken 15616 times.
16128 if (s_version < 8)
9514 {
9515
1/2
✓ Branch 0 taken 15616 times.
✗ Branch 1 not taken.
15616 if (!p_igetw(&oldtile, f, true))
9516 return qe_invalid;
9517 15616 }
9518
9519
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempweapon.misc,f,true))
9520 {
9521 return qe_invalid;
9522 }
9523
9524
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempweapon.csets,f,true))
9525 {
9526 return qe_invalid;
9527 }
9528
9529
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempweapon.frames,f,true))
9530 {
9531 return qe_invalid;
9532 }
9533
9534
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempweapon.speed,f,true))
9535 {
9536 return qe_invalid;
9537 }
9538
9539
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(!p_getc(&tempweapon.type,f,true))
9540 {
9541 return qe_invalid;
9542 }
9543
9544
2/2
✓ Branch 0 taken 15104 times.
✓ Branch 1 taken 1024 times.
16128 if ( s_version >= 7 )
9545 {
9546
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetw(&tempweapon.script,f,true))
9547 {
9548 return qe_invalid;
9549 }
9550
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(!p_igetl(&tempweapon.tile,f,true))
9551 {
9552 return qe_invalid;
9553 }
9554 1024 }
9555
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 15104 times.
16128 if ( s_version < 7 )
9556 {
9557 15104 tempweapon.tile = oldtile;
9558 15104 }
9559
9560
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(Header->zelda_version < 0x193)
9561 {
9562 if(!p_getc(&padding,f,true))
9563 {
9564 return qe_invalid;
9565 }
9566 }
9567
9568
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(s_version < 6)
9569 {
9570 if(i==ewFIRETRAIL)
9571 {
9572 tempweapon.misc |= WF_BEHIND;
9573 }
9574 else
9575 tempweapon.misc &= ~WF_BEHIND;
9576 }
9577
9578
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
16128 if(keepdata==true)
9579 {
9580 16128 memcpy(&wpnsbuf[i], &tempweapon, sizeof(tempweapon));
9581 16128 }
9582 16128 }
9583
9584
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true)
9585 {
9586
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version<2)
9587 {
9588 wpnsbuf[wSBOOM]=wpnsbuf[wBOOM];
9589 }
9590
9591
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version<5)
9592 {
9593 wpnsbuf[iwQuarterHearts].tile=1;
9594 wpnsbuf[iwQuarterHearts].csets=1;
9595 }
9596
9597
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(Header->zelda_version < 0x176)
9598 {
9599 wpnsbuf[iwSpawn] = *((wpndata*)(itemsbuf + iMisc1));
9600 wpnsbuf[iwDeath] = *((wpndata*)(itemsbuf + iMisc2));
9601 memset(&itemsbuf[iMisc1],0,sizeof(itemdata));
9602 memset(&itemsbuf[iMisc2],0,sizeof(itemdata));
9603 }
9604
9605
1/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
63 if((Header->zelda_version < 0x192)||
9606
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ((Header->zelda_version == 0x192)&&(Header->build<129)))
9607 {
9608 wpnsbuf[wHSCHAIN_V] = wpnsbuf[wHSCHAIN_H];
9609 }
9610
9611
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if((Header->zelda_version < 0x210))
9612 {
9613 wpnsbuf[wLSHEAD] = wpnsbuf[wHSHEAD];
9614 wpnsbuf[wLSCHAIN_H] = wpnsbuf[wHSCHAIN_H];
9615 wpnsbuf[wLSHANDLE] = wpnsbuf[wHSHANDLE];
9616 wpnsbuf[wLSCHAIN_V] = wpnsbuf[wHSCHAIN_V];
9617 }
9618 63 }
9619
9620 63 return 0;
9621 63 }
9622
9623 63 void init_guys(int32_t guyversion)
9624 {
9625
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 63 times.
32319 for(int32_t i=0; i<MAXGUYS; i++)
9626 {
9627 32256 guysbuf[i] = default_guys[0];
9628 32256 }
9629
9630
2/2
✓ Branch 0 taken 11151 times.
✓ Branch 1 taken 63 times.
11214 for(int32_t i=0; i<OLDMAXGUYS; i++)
9631 {
9632 11151 guysbuf[i] = default_guys[i];
9633
2/2
✓ Branch 0 taken 11025 times.
✓ Branch 1 taken 126 times.
11151 guysbuf[i].spr_shadow = (guysbuf[i].family==eeROCK && guysbuf[i].misc10==1) ? iwLargeShadow : iwShadow;
9634 11151 guysbuf[i].spr_death = iwDeath;
9635 11151 guysbuf[i].spr_spawn = iwSpawn;
9636 // Patra fix: 2.10 BSPatras used spDIG. 2.50 Patras use CSet 7.
9637
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 11151 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
11151 if(guyversion<=3 && i==ePATRABS)
9638 {
9639 guysbuf[i].bosspal=spDIG;
9640 guysbuf[i].cset=14;
9641 guysbuf[i].misc9=14;
9642 }
9643
9644
1/2
✓ Branch 0 taken 11151 times.
✗ Branch 1 not taken.
11151 if(guyversion<=3)
9645 {
9646 // Rope/Ghini Flash rules
9647 if(get_bit(deprecated_rules, qr_NOROPE2FLASH_DEP))
9648 {
9649 if(i==eROPE2)
9650 {
9651 guysbuf[i].flags2 &= ~guy_flashing;
9652 }
9653 }
9654
9655 if(get_bit(deprecated_rules, qr_NOBUBBLEFLASH_DEP))
9656 {
9657 if(i==eBUBBLEST || i==eBUBBLESP || i==eBUBBLESR || i==eBUBBLEIT || i==eBUBBLEIP || i==eBUBBLEIR)
9658 {
9659 guysbuf[i].flags2 &= ~guy_flashing;
9660 }
9661 }
9662
9663 if(i==eGHINI2)
9664 {
9665 if(get_bit(deprecated_rules, qr_GHINI2BLINK_DEP))
9666 {
9667 guysbuf[i].flags2 |= guy_blinking;
9668 }
9669
9670 if(get_bit(deprecated_rules, qr_PHANTOMGHINI2_DEP))
9671 {
9672 guysbuf[i].flags2 |= guy_transparent;
9673 }
9674 }
9675 }
9676
9677 // Darknut fix
9678
10/10
✓ Branch 0 taken 11088 times.
✓ Branch 1 taken 63 times.
✓ Branch 2 taken 11025 times.
✓ Branch 3 taken 63 times.
✓ Branch 4 taken 10962 times.
✓ Branch 5 taken 63 times.
✓ Branch 6 taken 10899 times.
✓ Branch 7 taken 63 times.
✓ Branch 8 taken 63 times.
✓ Branch 9 taken 10836 times.
11151 if(i==eDKNUT1 || i==eDKNUT2 || i==eDKNUT3 || i==eDKNUT4 || i==eDKNUT5)
9679 {
9680
2/2
✓ Branch 0 taken 135 times.
✓ Branch 1 taken 180 times.
315 if(get_bit(quest_rules,qr_NEWENEMYTILES))
9681 {
9682 135 guysbuf[i].s_tile=guysbuf[i].e_tile+120;
9683 135 guysbuf[i].s_width=guysbuf[i].e_width;
9684 135 guysbuf[i].s_height=guysbuf[i].e_height;
9685 135 }
9686 180 else guysbuf[i].s_tile=860;
9687
9688
1/2
✓ Branch 0 taken 315 times.
✗ Branch 1 not taken.
315 if(get_bit(deprecated_rules,qr_BRKBLSHLDS_DEP))
9689 {
9690 guysbuf[i].flags |= guy_bkshield;
9691 }
9692 315 }
9693
9694
3/4
✓ Branch 0 taken 11088 times.
✓ Branch 1 taken 63 times.
✓ Branch 2 taken 11151 times.
✗ Branch 3 not taken.
11151 if((i==eGELTRIB || i==eFGELTRIB) && get_bit(deprecated_rules,qr_OLDTRIBBLES_DEP))
9695 {
9696 guysbuf[i].misc3 = (i==eFGELTRIB ? eFZOL : eZOL);
9697 }
9698 11151 }
9699 63 }
9700
9701 void reset_weaponname(int32_t i)
9702 {
9703 if(i<wLast)
9704 {
9705 strcpy(weapon_string[i],old_weapon_string[i]);
9706 }
9707 else
9708 sprintf(weapon_string[i],"zz%03d",i);
9709 }
9710
9711 63 void init_item_drop_sets()
9712 {
9713
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<MAXITEMDROPSETS; i++)
9714 {
9715 // item_drop_sets[i] = default_item_drop_sets[0];
9716 16128 memset(&item_drop_sets[i], 0, sizeof(item_drop_object));
9717 16128 }
9718
9719
2/2
✓ Branch 0 taken 819 times.
✓ Branch 1 taken 63 times.
882 for(int32_t i=0; i<isMAX; i++)
9720 {
9721 819 item_drop_sets[i] = default_item_drop_sets[i];
9722
9723 // Deprecated: qr_NOCLOCKS and qr_ALLOW10RUPEEDROPS
9724
2/2
✓ Branch 0 taken 8190 times.
✓ Branch 1 taken 819 times.
9009 for(int32_t j=0; j<10; ++j)
9725 {
9726 8190 int32_t it = item_drop_sets[i].item[j];
9727
9728
3/4
✓ Branch 0 taken 5796 times.
✓ Branch 1 taken 2394 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 378 times.
8190 if((itemsbuf[it].family == itype_rupee && ((itemsbuf[it].amount)&0xFFF) == 10)
9729
2/2
✓ Branch 0 taken 378 times.
✓ Branch 1 taken 5418 times.
5796 && !get_bit(deprecated_rules, qr_ALLOW10RUPEEDROPS_DEP))
9730 {
9731 378 item_drop_sets[i].chance[j+1]=0;
9732 378 }
9733
3/4
✓ Branch 0 taken 252 times.
✓ Branch 1 taken 7560 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 252 times.
7812 else if(itemsbuf[it].family == itype_clock && get_bit(deprecated_rules, qr_NOCLOCKS_DEP))
9734 {
9735 item_drop_sets[i].chance[j+1]=0;
9736 }
9737
9738 // From Sept 2007 to Dec 2008, non-gameplay items were prohibited.
9739
2/2
✓ Branch 0 taken 8182 times.
✓ Branch 1 taken 8 times.
8190 if(itemsbuf[it].family == itype_misc)
9740 {
9741 // If a non-gameplay item was selected, then item drop was aborted.
9742 // Reflect this by increasing the 'Nothing' chance accordingly.
9743 8 item_drop_sets[i].chance[0]+=item_drop_sets[i].chance[j+1];
9744 8 item_drop_sets[i].chance[j+1]=0;
9745 8 }
9746 8190 }
9747 819 }
9748 63 }
9749
9750 63 void init_favorites()
9751 {
9752
2/2
✓ Branch 0 taken 6300 times.
✓ Branch 1 taken 63 times.
6363 for(int32_t i=0; i<MAXFAVORITECOMBOS; i++)
9753 {
9754 6300 favorite_combos[i]=-1;
9755 6300 }
9756
9757
2/2
✓ Branch 0 taken 6300 times.
✓ Branch 1 taken 63 times.
6363 for(int32_t i=0; i<MAXFAVORITECOMBOALIASES; i++)
9758 {
9759 6300 favorite_comboaliases[i]=-1;
9760 6300 }
9761 63 }
9762
9763 const char *ctype_name[cMAX]=
9764 {
9765 "cNONE", "cSTAIR", "cCAVE", "cWATER", "cARMOS", "cGRAVE", "cDOCK",
9766 "cUNDEF", "cPUSH_WAIT", "cPUSH_HEAVY", "cPUSH_HW", "cL_STATUE", "cR_STATUE",
9767 "cWALKSLOW", "cCVUP", "cCVDOWN", "cCVLEFT", "cCVRIGHT", "cSWIMWARP", "cDIVEWARP",
9768 "cLADDERHOOKSHOT", "cTRIGNOFLAG", "cTRIGFLAG", "cZELDA", "cSLASH", "cSLASHITEM",
9769 "cPUSH_HEAVY2", "cPUSH_HW2", "cPOUND", "cHSGRAB", "cHSBRIDGE", "cDAMAGE1",
9770 "cDAMAGE2", "cDAMAGE3", "cDAMAGE4", "cC_STATUE", "cTRAP_H", "cTRAP_V", "cTRAP_4",
9771 "cTRAP_LR", "cTRAP_UD", "cPIT", "cHOOKSHOTONLY", "cOVERHEAD", "cNOFLYZONE", "cMIRROR",
9772 "cMIRRORSLASH", "cMIRRORBACKSLASH", "cMAGICPRISM", "cMAGICPRISM4",
9773 "cMAGICSPONGE", "cCAVE2", "cEYEBALL_A", "cEYEBALL_B", "cNOJUMPZONE", "cBUSH",
9774 "cFLOWERS", "cTALLGRASS", "cSHALLOWWATER", "cLOCKBLOCK", "cLOCKBLOCK2",
9775 "cBOSSLOCKBLOCK", "cBOSSLOCKBLOCK2", "cLADDERONLY", "cBSGRAVE",
9776 "cCHEST", "cCHEST2", "cLOCKEDCHEST", "cLOCKEDCHEST2", "cBOSSCHEST", "cBOSSCHEST2",
9777 "cRESET", "cSAVE", "cSAVE2", "cCAVEB", "cCAVEC", "cCAVED",
9778 "cSTAIRB", "cSTAIRC", "cSTAIRD", "cPITB", "cPITC", "cPITD",
9779 "cCAVE2B", "cCAVE2C", "cCAVE2D", "cSWIMWARPB", "cSWIMWARPC", "cSWIMWARPD",
9780 "cDIVEWARPB", "cDIVEWARPC", "cDIVEWARPD", "cSTAIRR", "cPITR",
9781 "cAWARPA", "cAWARPB", "cAWARPC", "cAWARPD", "cAWARPR",
9782 "cSWARPA", "cSWARPB", "cSWARPC", "cSWARPD", "cSWARPR", "cSTRIGNOFLAG", "cSTRIGFLAG",
9783 "cSTEP", "cSTEPSAME", "cSTEPALL", "cSTEPCOPY", "cNOENEMY", "cBLOCKARROW1", "cBLOCKARROW2",
9784 "cBLOCKARROW3", "cBLOCKBRANG1", "cBLOCKBRANG2", "cBLOCKBRANG3", "cBLOCKSBEAM", "cBLOCKALL",
9785 "cBLOCKFIREBALL", "cDAMAGE5", "cDAMAGE6", "cDAMAGE7", "cCHANGE", "cSPINTILE1", "cSPINTILE2",
9786 "cSCREENFREEZE", "cSCREENFREEZEFF", "cNOGROUNDENEMY", "cSLASHNEXT", "cSLASHNEXTITEM", "cBUSHNEXT"
9787 "cSLASHTOUCHY", "cSLASHITEMTOUCHY", "cBUSHTOUCHY", "cFLOWERSTOUCHY", "cTALLGRASSTOUCHY",
9788 "cSLASHNEXTTOUCHY", "cSLASHNEXTITEMTOUCHY", "cBUSHNEXTTOUCHY", "cEYEBALL_4", "cTALLGRASSNEXT",
9789 "cSCRIPT1", "cSCRIPT2", "cSCRIPT3", "cSCRIPT4", "cSCRIPT5",
9790 "cSCRIPT6", "cSCRIPT7", "cSCRIPT8", "cSCRIPT9", "cSCRIPT10",
9791 "cSCRIPT11", "cSCRIPT12", "cSCRIPT13", "cSCRIPT14", "cSCRIPT15",
9792 "cSCRIPT16", "cSCRIPT17", "cSCRIPT18", "cSCRIPT19", "cSCRIPT20"
9793
9794 };
9795
9796 123 int32_t init_combo_classes()
9797 {
9798
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 123 times.
123 zinfo* zi = (load_tmp_zi ? load_tmp_zi : &ZI);
9799
2/2
✓ Branch 0 taken 21894 times.
✓ Branch 1 taken 123 times.
22017 for(int32_t i=0; i<cMAX; i++)
9800 {
9801 21894 combo_class_buf[i] = default_combo_classes[i];
9802
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 21894 times.
21894 if ( char const* nm = zi->getComboTypeName(i) )
9803 {
9804 21894 size_t len = strlen(nm);
9805
2/2
✓ Branch 0 taken 1401216 times.
✓ Branch 1 taken 21894 times.
1423110 for ( size_t q = 0; q < 64; q++ )
9806 {
9807
2/2
✓ Branch 0 taken 324474 times.
✓ Branch 1 taken 1076742 times.
1401216 combo_class_buf[i].name[q] = (q<len ? nm[q] : 0);
9808 1401216 }
9809 21894 }
9810 21894 }
9811
9812 123 return 0;
9813 }
9814
9815 59 int32_t readherosprites2(PACKFILE *f, int32_t v_herosprites, int32_t cv_herosprites, bool keepdata)
9816 {
9817
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 assert(v_herosprites < 6);
9818 //these are here to bypass compiler warnings about unused arguments
9819 59 cv_herosprites=cv_herosprites;
9820
9821
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(keepdata)
9822 {
9823 59 zinit.hero_swim_speed=67; //default
9824 59 setupherotiles(zinit.heroAnimationStyle);
9825 59 setupherodefenses();
9826 59 setupherooffsets();
9827 59 }
9828
9829
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(v_herosprites>=0)
9830 {
9831 word tile, tile2;
9832 byte flip, extend, dummy_byte;
9833
9834
2/2
✓ Branch 0 taken 236 times.
✓ Branch 1 taken 59 times.
295 for(int32_t i=0; i<4; i++)
9835 {
9836
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_igetw(&tile,f,keepdata))
9837 {
9838 return qe_invalid;
9839 }
9840
9841
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&flip,f,keepdata))
9842 {
9843 return qe_invalid;
9844 }
9845
9846
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&extend,f,keepdata))
9847 {
9848 return qe_invalid;
9849 }
9850
9851
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 236 times.
236 if(keepdata)
9852 {
9853 236 walkspr[i][spr_tile]=(int32_t)tile;
9854 236 walkspr[i][spr_flip]=(int32_t)flip;
9855 236 walkspr[i][spr_extend]=(int32_t)extend;
9856 236 }
9857 236 }
9858
9859
2/2
✓ Branch 0 taken 236 times.
✓ Branch 1 taken 59 times.
295 for(int32_t i=0; i<4; i++)
9860 {
9861
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_igetw(&tile,f,keepdata))
9862 {
9863 return qe_invalid;
9864 }
9865
9866
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&flip,f,keepdata))
9867 {
9868 return qe_invalid;
9869 }
9870
9871
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&extend,f,keepdata))
9872 {
9873 return qe_invalid;
9874 }
9875
9876
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 236 times.
236 if(keepdata)
9877 {
9878 236 stabspr[i][spr_tile]=(int32_t)tile;
9879 236 stabspr[i][spr_flip]=(int32_t)flip;
9880 236 stabspr[i][spr_extend]=(int32_t)extend;
9881 236 }
9882 236 }
9883
9884
2/2
✓ Branch 0 taken 236 times.
✓ Branch 1 taken 59 times.
295 for(int32_t i=0; i<4; i++)
9885 {
9886
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_igetw(&tile,f,keepdata))
9887 {
9888 return qe_invalid;
9889 }
9890
9891
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&flip,f,keepdata))
9892 {
9893 return qe_invalid;
9894 }
9895
9896
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&extend,f,keepdata))
9897 {
9898 return qe_invalid;
9899 }
9900
9901
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 236 times.
236 if(keepdata)
9902 {
9903 236 slashspr[i][spr_tile]=(int32_t)tile;
9904 236 slashspr[i][spr_flip]=(int32_t)flip;
9905 236 slashspr[i][spr_extend]=(int32_t)extend;
9906 236 }
9907 236 }
9908
9909
2/2
✓ Branch 0 taken 236 times.
✓ Branch 1 taken 59 times.
295 for(int32_t i=0; i<4; i++)
9910 {
9911
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_igetw(&tile,f,keepdata))
9912 {
9913 return qe_invalid;
9914 }
9915
9916
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&flip,f,keepdata))
9917 {
9918 return qe_invalid;
9919 }
9920
9921
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&extend,f,keepdata))
9922 {
9923 return qe_invalid;
9924 }
9925
9926
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 236 times.
236 if(keepdata)
9927 {
9928 236 floatspr[i][spr_tile]=(int32_t)tile;
9929 236 floatspr[i][spr_flip]=(int32_t)flip;
9930 236 floatspr[i][spr_extend]=(int32_t)extend;
9931 236 }
9932 236 }
9933
9934
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(v_herosprites>1)
9935 {
9936
2/2
✓ Branch 0 taken 236 times.
✓ Branch 1 taken 59 times.
295 for(int32_t i=0; i<4; i++)
9937 {
9938
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_igetw(&tile,f,keepdata))
9939 {
9940 return qe_invalid;
9941 }
9942
9943
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&flip,f,keepdata))
9944 {
9945 return qe_invalid;
9946 }
9947
9948
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&extend,f,keepdata))
9949 {
9950 return qe_invalid;
9951 }
9952
9953
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 236 times.
236 if(keepdata)
9954 {
9955 236 swimspr[i][spr_tile]=(int32_t)tile;
9956 236 swimspr[i][spr_flip]=(int32_t)flip;
9957 236 swimspr[i][spr_extend]=(int32_t)extend;
9958 236 }
9959 236 }
9960 59 }
9961
9962
2/2
✓ Branch 0 taken 236 times.
✓ Branch 1 taken 59 times.
295 for(int32_t i=0; i<4; i++)
9963 {
9964
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_igetw(&tile,f,keepdata))
9965 {
9966 return qe_invalid;
9967 }
9968
9969
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&flip,f,keepdata))
9970 {
9971 return qe_invalid;
9972 }
9973
9974
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&extend,f,keepdata))
9975 {
9976 return qe_invalid;
9977 }
9978
9979
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 236 times.
236 if(keepdata)
9980 {
9981 236 divespr[i][spr_tile]=(int32_t)tile;
9982 236 divespr[i][spr_flip]=(int32_t)flip;
9983 236 divespr[i][spr_extend]=(int32_t)extend;
9984 236 }
9985 236 }
9986
9987
2/2
✓ Branch 0 taken 236 times.
✓ Branch 1 taken 59 times.
295 for(int32_t i=0; i<4; i++)
9988 {
9989
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_igetw(&tile,f,keepdata))
9990 {
9991 return qe_invalid;
9992 }
9993
9994
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&flip,f,keepdata))
9995 {
9996 return qe_invalid;
9997 }
9998
9999
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&extend,f,keepdata))
10000 {
10001 return qe_invalid;
10002 }
10003
10004
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 236 times.
236 if(keepdata)
10005 {
10006 236 poundspr[i][spr_tile]=(int32_t)tile;
10007 236 poundspr[i][spr_flip]=(int32_t)flip;
10008 236 poundspr[i][spr_extend]=(int32_t)extend;
10009 236 }
10010 236 }
10011
10012
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if(!p_igetw(&tile,f,keepdata))
10013 {
10014 return qe_invalid;
10015 }
10016
10017 59 flip=0;
10018
10019
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(v_herosprites>0)
10020 {
10021
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if(!p_getc(&flip,f,keepdata))
10022 {
10023 return qe_invalid;
10024 }
10025 59 }
10026
10027
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if(!p_getc(&extend,f,keepdata))
10028 {
10029 return qe_invalid;
10030 }
10031
10032
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(keepdata)
10033 {
10034 59 castingspr[spr_tile]=(int32_t)tile;
10035 59 castingspr[spr_flip]=(int32_t)flip;
10036 59 castingspr[spr_extend]=(int32_t)extend;
10037 59 }
10038
10039
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if(v_herosprites>0)
10040 {
10041 59 int32_t num_holdsprs = (v_herosprites > 6 ? 3 : 2);
10042
2/2
✓ Branch 0 taken 118 times.
✓ Branch 1 taken 59 times.
177 for(int32_t i=0; i<2; i++)
10043 {
10044
2/2
✓ Branch 0 taken 236 times.
✓ Branch 1 taken 118 times.
354 for(int32_t j=0; j<num_holdsprs; j++)
10045 {
10046
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_igetw(&tile,f,keepdata))
10047 {
10048 return qe_invalid;
10049 }
10050
10051
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&flip,f,keepdata))
10052 {
10053 return qe_invalid;
10054 }
10055
10056
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&extend,f,keepdata))
10057 {
10058 return qe_invalid;
10059 }
10060
10061
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 236 times.
236 if(keepdata)
10062 {
10063 236 holdspr[i][j][spr_tile]=(int32_t)tile;
10064 236 holdspr[i][j][spr_flip]=(int32_t)flip;
10065 236 holdspr[i][j][spr_extend]=(int32_t)extend;
10066 236 }
10067 236 }
10068 118 }
10069 59 }
10070 else
10071 {
10072 for(int32_t i=0; i<2; i++)
10073 {
10074 if(!p_igetw(&tile,f,keepdata))
10075 {
10076 return qe_invalid;
10077 }
10078
10079 if(!p_igetw(&tile2,f,keepdata))
10080 {
10081 return qe_invalid;
10082 }
10083
10084 if(!p_getc(&extend,f,keepdata))
10085 {
10086 return qe_invalid;
10087 }
10088
10089 if(keepdata)
10090 {
10091 holdspr[i][spr_hold1][spr_tile]=(int32_t)tile;
10092 holdspr[i][spr_hold1][spr_flip]=(int32_t)flip;
10093 holdspr[i][spr_hold1][spr_extend]=(int32_t)extend;
10094 holdspr[i][spr_hold2][spr_tile]=(int32_t)tile2;
10095 holdspr[i][spr_hold2][spr_flip]=(int32_t)flip;
10096 holdspr[i][spr_hold2][spr_extend]=(int32_t)extend;
10097 }
10098 }
10099 }
10100
10101
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(v_herosprites>2)
10102 {
10103
2/2
✓ Branch 0 taken 236 times.
✓ Branch 1 taken 59 times.
295 for(int32_t i=0; i<4; i++)
10104 {
10105
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_igetw(&tile,f,keepdata))
10106 {
10107 return qe_invalid;
10108 }
10109
10110
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&flip,f,keepdata))
10111 {
10112 return qe_invalid;
10113 }
10114
10115
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&extend,f,keepdata))
10116 {
10117 return qe_invalid;
10118 }
10119
10120
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 236 times.
236 if(keepdata)
10121 {
10122 236 jumpspr[i][spr_tile]=(int32_t)tile;
10123 236 jumpspr[i][spr_flip]=(int32_t)flip;
10124 236 jumpspr[i][spr_extend]=(int32_t)extend;
10125 236 }
10126 236 }
10127 59 }
10128
10129
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(v_herosprites>3)
10130 {
10131
2/2
✓ Branch 0 taken 236 times.
✓ Branch 1 taken 59 times.
295 for(int32_t i=0; i<4; i++)
10132 {
10133
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_igetw(&tile,f,keepdata))
10134 {
10135 return qe_invalid;
10136 }
10137
10138
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&flip,f,keepdata))
10139 {
10140 return qe_invalid;
10141 }
10142
10143
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(!p_getc(&extend,f,keepdata))
10144 {
10145 return qe_invalid;
10146 }
10147
10148
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 236 times.
236 if(keepdata)
10149 {
10150 236 chargespr[i][spr_tile]=(int32_t)tile;
10151 236 chargespr[i][spr_flip]=(int32_t)flip;
10152 236 chargespr[i][spr_extend]=(int32_t)extend;
10153 236 }
10154 236 }
10155 59 }
10156
10157
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(v_herosprites>4)
10158 {
10159
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(!p_getc(&dummy_byte,f,keepdata))
10160 {
10161 return qe_invalid;
10162 }
10163
10164
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(keepdata)
10165 {
10166 59 zinit.hero_swim_speed=(byte)dummy_byte;
10167 59 }
10168 59 }
10169
10170
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if(keepdata)
10171 {
10172 59 memset(frozenspr, 0, sizeof(frozenspr));
10173 59 memset(frozen_waterspr, 0, sizeof(frozen_waterspr));
10174 59 memset(onfirespr, 0, sizeof(onfirespr));
10175 59 memset(onfire_waterspr, 0, sizeof(onfire_waterspr));
10176 59 memset(diggingspr, 0, sizeof(diggingspr));
10177 59 memset(usingrodspr, 0, sizeof(usingrodspr));
10178 59 memset(usingcanespr, 0, sizeof(usingcanespr));
10179 59 memset(pushingspr, 0, sizeof(pushingspr));
10180 59 memset(liftingspr, 0, sizeof(liftingspr));
10181 59 memset(liftingwalkspr, 0, sizeof(liftingwalkspr));
10182 59 memset(stunnedspr, 0, sizeof(stunnedspr));
10183 59 memset(stunned_waterspr, 0, sizeof(stunned_waterspr));
10184 59 memset(fallingspr, 0, sizeof(fallingspr));
10185 59 memset(shockedspr, 0, sizeof(shockedspr));
10186 59 memset(shocked_waterspr, 0, sizeof(shocked_waterspr));
10187 59 memset(pullswordspr, 0, sizeof(pullswordspr));
10188 59 memset(readingspr, 0, sizeof(readingspr));
10189 59 memset(slash180spr, 0, sizeof(slash180spr));
10190 59 memset(slashZ4spr, 0, sizeof(slashZ4spr));
10191 59 memset(dashspr, 0, sizeof(dashspr));
10192 59 memset(bonkspr, 0, sizeof(bonkspr));
10193 59 memset(medallionsprs, 0, sizeof(medallionsprs));
10194 59 memset(holdspr[0][2], 0, sizeof(holdspr[0][2])); //Sword hold (Land)
10195 59 memset(holdspr[1][2], 0, sizeof(holdspr[1][2])); //Sword hold (Water)
10196
2/2
✓ Branch 0 taken 236 times.
✓ Branch 1 taken 59 times.
295 for(int32_t q = 0; q < 4; ++q)
10197 {
10198
2/2
✓ Branch 0 taken 708 times.
✓ Branch 1 taken 236 times.
944 for(int32_t p = 0; p < 3; ++p)
10199 {
10200 708 drowningspr[q][p] = divespr[q][p];
10201 708 drowning_lavaspr[q][p] = divespr[q][p];
10202 708 }
10203 236 }
10204 59 memset(sideswimspr, 0, sizeof(sideswimspr));
10205 59 memset(sideswimslashspr, 0, sizeof(sideswimslashspr));
10206 59 memset(sideswimstabspr, 0, sizeof(sideswimstabspr));
10207 59 memset(sideswimpoundspr, 0, sizeof(sideswimpoundspr));
10208 59 memset(sideswimchargespr, 0, sizeof(sideswimchargespr));
10209 59 memset(sideswimholdspr, 0, sizeof(sideswimholdspr));
10210 59 memset(sidedrowningspr, 0, sizeof(sidedrowningspr));
10211 59 }
10212 59 }
10213
10214 59 return 0;
10215 59 }
10216
10217 680 void setSprite(int32_t* arr, int32_t tile, int32_t flip, int32_t ext)
10218 {
10219 680 arr[spr_tile] = tile;
10220
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 680 times.
680 arr[spr_flip] = (flip > 3 ? 0 : flip);
10221
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 680 times.
680 arr[spr_extend] = (ext > 2 ? 0 : ext);
10222 680 }
10223 //Used to read the player sprites as int32_t, not word.
10224 4 int32_t readherosprites3(PACKFILE *f, int32_t v_herosprites, int32_t cv_herosprites, bool keepdata)
10225 {
10226 //these are here to bypass compiler warnings about unused arguments
10227 4 cv_herosprites=cv_herosprites;
10228
10229
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if(keepdata)
10230 {
10231 4 zinit.hero_swim_speed=67; //default
10232 4 setupherotiles(zinit.heroAnimationStyle);
10233 4 setupherodefenses();
10234 4 setupherooffsets();
10235 4 }
10236
10237 int32_t tile, tile2;
10238 byte flip, extend, dummy_byte;
10239
10240
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if(v_herosprites>=0)
10241 {
10242
10243
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t i=0; i<4; i++)
10244 {
10245
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10246 {
10247 return qe_invalid;
10248 }
10249
10250
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10251 {
10252 return qe_invalid;
10253 }
10254
10255
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10256 {
10257 return qe_invalid;
10258 }
10259
10260 16 if(keepdata)
10261 {
10262 16 setSprite(walkspr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10263 16 }
10264 16 }
10265
10266
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t i=0; i<4; i++)
10267 {
10268
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10269 {
10270 return qe_invalid;
10271 }
10272
10273
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10274 {
10275 return qe_invalid;
10276 }
10277
10278
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10279 {
10280 return qe_invalid;
10281 }
10282
10283
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10284 {
10285 16 setSprite(stabspr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10286 16 }
10287 16 }
10288
10289
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t i=0; i<4; i++)
10290 {
10291
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10292 {
10293 return qe_invalid;
10294 }
10295
10296
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10297 {
10298 return qe_invalid;
10299 }
10300
10301
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10302 {
10303 return qe_invalid;
10304 }
10305
10306
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10307 {
10308 16 setSprite(slashspr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10309 16 }
10310 16 }
10311
10312
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t i=0; i<4; i++)
10313 {
10314
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10315 {
10316 return qe_invalid;
10317 }
10318
10319
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10320 {
10321 return qe_invalid;
10322 }
10323
10324
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10325 {
10326 return qe_invalid;
10327 }
10328
10329
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10330 {
10331 16 setSprite(floatspr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10332 16 }
10333 16 }
10334
10335
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if(v_herosprites>1)
10336 {
10337
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t i=0; i<4; i++)
10338 {
10339
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10340 {
10341 return qe_invalid;
10342 }
10343
10344
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10345 {
10346 return qe_invalid;
10347 }
10348
10349
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10350 {
10351 return qe_invalid;
10352 }
10353
10354
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10355 {
10356 16 setSprite(swimspr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10357 16 }
10358 16 }
10359 4 }
10360
10361
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t i=0; i<4; i++)
10362 {
10363
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10364 {
10365 return qe_invalid;
10366 }
10367
10368
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10369 {
10370 return qe_invalid;
10371 }
10372
10373
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10374 {
10375 return qe_invalid;
10376 }
10377
10378
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10379 {
10380 16 setSprite(divespr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10381 16 }
10382 16 }
10383
10384
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t i=0; i<4; i++)
10385 {
10386
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10387 {
10388 return qe_invalid;
10389 }
10390
10391
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10392 {
10393 return qe_invalid;
10394 }
10395
10396
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10397 {
10398 return qe_invalid;
10399 }
10400
10401
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10402 {
10403 16 setSprite(poundspr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10404 16 }
10405 16 }
10406
10407
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_igetl(&tile,f,keepdata))
10408 {
10409 return qe_invalid;
10410 }
10411
10412 4 flip=0;
10413
10414
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if(v_herosprites>0)
10415 {
10416
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_getc(&flip,f,keepdata))
10417 {
10418 return qe_invalid;
10419 }
10420 4 }
10421
10422
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_getc(&extend,f,keepdata))
10423 {
10424 return qe_invalid;
10425 }
10426
10427
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if(keepdata)
10428 {
10429 4 setSprite(castingspr, int32_t(tile), int32_t(flip), int32_t(extend));
10430 4 }
10431
10432
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(v_herosprites>0)
10433 {
10434 4 int32_t num_holdsprs = (v_herosprites > 6 ? 3 : 2);
10435
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 4 times.
12 for(int32_t i=0; i<2; i++)
10436 {
10437
2/2
✓ Branch 0 taken 24 times.
✓ Branch 1 taken 8 times.
32 for(int32_t j=0; j<num_holdsprs; j++)
10438 {
10439
1/2
✓ Branch 0 taken 24 times.
✗ Branch 1 not taken.
24 if(!p_igetl(&tile,f,keepdata))
10440 {
10441 return qe_invalid;
10442 }
10443
10444
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 24 times.
24 if(!p_getc(&flip,f,keepdata))
10445 {
10446 return qe_invalid;
10447 }
10448
10449
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 24 times.
24 if(!p_getc(&extend,f,keepdata))
10450 {
10451 return qe_invalid;
10452 }
10453
10454
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 24 times.
24 if(keepdata)
10455 {
10456 24 setSprite(holdspr[i][j], int32_t(tile), int32_t(flip), int32_t(extend));
10457 24 }
10458 24 }
10459 8 }
10460 4 }
10461 else
10462 {
10463 for(int32_t i=0; i<2; i++)
10464 {
10465 if(!p_igetl(&tile,f,keepdata))
10466 {
10467 return qe_invalid;
10468 }
10469
10470 if(!p_igetl(&tile2,f,keepdata))
10471 {
10472 return qe_invalid;
10473 }
10474
10475 if(!p_getc(&extend,f,keepdata))
10476 {
10477 return qe_invalid;
10478 }
10479
10480 if(keepdata)
10481 {
10482 setSprite(holdspr[i][spr_hold1], int32_t(tile), int32_t(flip), int32_t(extend));
10483 setSprite(holdspr[i][spr_hold2], int32_t(tile2), int32_t(flip), int32_t(extend));
10484 }
10485 }
10486 }
10487
10488
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if(v_herosprites>2)
10489 {
10490
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t i=0; i<4; i++)
10491 {
10492
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10493 {
10494 return qe_invalid;
10495 }
10496
10497
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10498 {
10499 return qe_invalid;
10500 }
10501
10502
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10503 {
10504 return qe_invalid;
10505 }
10506
10507
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10508 {
10509 16 setSprite(jumpspr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10510 16 }
10511 16 }
10512 4 }
10513
10514
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if(v_herosprites>3)
10515 {
10516
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t i=0; i<4; i++)
10517 {
10518
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10519 {
10520 return qe_invalid;
10521 }
10522
10523
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10524 {
10525 return qe_invalid;
10526 }
10527
10528
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10529 {
10530 return qe_invalid;
10531 }
10532
10533
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10534 {
10535 16 setSprite(chargespr[i], int32_t(tile), int32_t(flip), int32_t(extend));
10536 16 }
10537 16 }
10538 4 }
10539
10540
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if(v_herosprites>4)
10541 {
10542
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_getc(&dummy_byte,f,keepdata))
10543 {
10544 return qe_invalid;
10545 }
10546
10547
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if(keepdata)
10548 {
10549 4 zinit.hero_swim_speed=(byte)dummy_byte;
10550 4 }
10551 4 }
10552
10553
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(v_herosprites>6)
10554 {
10555
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10556 {
10557
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10558 return qe_invalid;
10559
10560
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10561 return qe_invalid;
10562
10563
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10564 return qe_invalid;
10565
10566
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10567 {
10568 16 setSprite(frozenspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10569 16 }
10570 16 }
10571
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10572 {
10573
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10574 return qe_invalid;
10575
10576
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10577 return qe_invalid;
10578
10579
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10580 return qe_invalid;
10581
10582
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10583 {
10584 16 setSprite(frozen_waterspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10585 16 }
10586 16 }
10587
10588
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10589 {
10590
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10591 return qe_invalid;
10592
10593
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10594 return qe_invalid;
10595
10596
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10597 return qe_invalid;
10598
10599
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10600 {
10601 16 setSprite(onfirespr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10602 16 }
10603 16 }
10604
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10605 {
10606
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10607 return qe_invalid;
10608
10609
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10610 return qe_invalid;
10611
10612
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10613 return qe_invalid;
10614
10615
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10616 {
10617 16 setSprite(onfire_waterspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10618 16 }
10619 16 }
10620
10621
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10622 {
10623
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10624 return qe_invalid;
10625
10626
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10627 return qe_invalid;
10628
10629
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10630 return qe_invalid;
10631
10632
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10633 {
10634 16 setSprite(diggingspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10635 16 }
10636 16 }
10637
10638
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10639 {
10640
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10641 return qe_invalid;
10642
10643
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10644 return qe_invalid;
10645
10646
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10647 return qe_invalid;
10648
10649
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10650 {
10651 16 setSprite(usingrodspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10652 16 }
10653 16 }
10654
10655
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10656 {
10657
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10658 return qe_invalid;
10659
10660
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10661 return qe_invalid;
10662
10663
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&extend,f,keepdata))
10664 return qe_invalid;
10665
10666
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10667 {
10668 16 setSprite(usingcanespr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10669 16 }
10670 16 }
10671
10672
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10673 {
10674
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10675 return qe_invalid;
10676
10677
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10678 return qe_invalid;
10679
10680
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10681 return qe_invalid;
10682
10683
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10684 {
10685 16 setSprite(pushingspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10686 16 }
10687 16 }
10688
10689
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10690 {
10691
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10692 return qe_invalid;
10693
10694
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10695 return qe_invalid;
10696
10697
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&extend,f,keepdata))
10698 return qe_invalid;
10699
10700 16 byte frames = 0;
10701
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 12 times.
16 if(v_herosprites > 15)
10702 {
10703
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if(!p_getc(&frames,f,keepdata))
10704 return qe_invalid;
10705 12 }
10706
10707
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10708 {
10709 16 setSprite(liftingspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10710 16 liftingspr[q][spr_frames] = frames;
10711 16 }
10712 16 }
10713
10714
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10715 {
10716
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10717 return qe_invalid;
10718
10719
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10720 return qe_invalid;
10721
10722
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&extend,f,keepdata))
10723 return qe_invalid;
10724
10725
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10726 {
10727 16 setSprite(liftingwalkspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10728 16 }
10729 16 }
10730
10731
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10732 {
10733
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_igetl(&tile,f,keepdata))
10734 return qe_invalid;
10735
10736
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10737 return qe_invalid;
10738
10739
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10740 return qe_invalid;
10741
10742
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10743 {
10744 16 setSprite(stunnedspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10745 16 }
10746 16 }
10747
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10748 {
10749
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10750 return qe_invalid;
10751
10752
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10753 return qe_invalid;
10754
10755
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&extend,f,keepdata))
10756 return qe_invalid;
10757
10758
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10759 {
10760 16 setSprite(stunned_waterspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10761 16 }
10762 16 }
10763
10764
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10765 {
10766
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10767 return qe_invalid;
10768
10769
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10770 return qe_invalid;
10771
10772
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10773 return qe_invalid;
10774
10775
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10776 {
10777 16 setSprite(drowningspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10778 16 }
10779 16 }
10780
10781
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10782 {
10783
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10784 return qe_invalid;
10785
10786
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10787 return qe_invalid;
10788
10789
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&extend,f,keepdata))
10790 return qe_invalid;
10791
10792
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10793 {
10794 16 setSprite(drowning_lavaspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10795 16 }
10796 16 }
10797
10798
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10799 {
10800
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10801 return qe_invalid;
10802
10803
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10804 return qe_invalid;
10805
10806
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&extend,f,keepdata))
10807 return qe_invalid;
10808
10809
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10810 {
10811 16 setSprite(fallingspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10812 16 }
10813 16 }
10814
10815
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10816 {
10817
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10818 return qe_invalid;
10819
10820
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10821 return qe_invalid;
10822
10823
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&extend,f,keepdata))
10824 return qe_invalid;
10825
10826
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10827 {
10828 16 setSprite(shockedspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10829 16 }
10830 16 }
10831
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10832 {
10833
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10834 return qe_invalid;
10835
10836
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10837 return qe_invalid;
10838
10839
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&extend,f,keepdata))
10840 return qe_invalid;
10841
10842
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10843 {
10844 16 setSprite(shocked_waterspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10845 16 }
10846 16 }
10847
10848
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10849 {
10850
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10851 return qe_invalid;
10852
10853
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
10854 return qe_invalid;
10855
10856
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10857 return qe_invalid;
10858
10859
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10860 {
10861 16 setSprite(pullswordspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10862 16 }
10863 16 }
10864
10865
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10866 {
10867
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10868 return qe_invalid;
10869
10870
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10871 return qe_invalid;
10872
10873
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&extend,f,keepdata))
10874 return qe_invalid;
10875
10876
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10877 {
10878 16 setSprite(readingspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10879 16 }
10880 16 }
10881
10882
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10883 {
10884
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_igetl(&tile,f,keepdata))
10885 return qe_invalid;
10886
10887
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10888 return qe_invalid;
10889
10890
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
10891 return qe_invalid;
10892
10893
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10894 {
10895 16 setSprite(slash180spr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10896 16 }
10897 16 }
10898
10899
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10900 {
10901
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10902 return qe_invalid;
10903
10904
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10905 return qe_invalid;
10906
10907
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&extend,f,keepdata))
10908 return qe_invalid;
10909
10910
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10911 {
10912 16 setSprite(slashZ4spr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10913 16 }
10914 16 }
10915
10916
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10917 {
10918
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10919 return qe_invalid;
10920
10921
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10922 return qe_invalid;
10923
10924
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&extend,f,keepdata))
10925 return qe_invalid;
10926
10927
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10928 {
10929 16 setSprite(dashspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10930 16 }
10931 16 }
10932
10933
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
10934 {
10935
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
10936 return qe_invalid;
10937
10938
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&flip,f,keepdata))
10939 return qe_invalid;
10940
10941
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_getc(&extend,f,keepdata))
10942 return qe_invalid;
10943
10944
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
10945 {
10946 16 setSprite(bonkspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
10947 16 }
10948 16 }
10949
10950
2/2
✓ Branch 0 taken 12 times.
✓ Branch 1 taken 4 times.
16 for(int32_t q = 0; q < 3; ++q) //Not directions; number of medallion sprs
10951 {
10952
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_igetl(&tile,f,keepdata))
10953 return qe_invalid;
10954
10955
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&flip,f,keepdata))
10956 return qe_invalid;
10957
10958
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&extend,f,keepdata))
10959 return qe_invalid;
10960
10961
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if(keepdata)
10962 {
10963 12 setSprite(medallionsprs[q], int32_t(tile), int32_t(flip), int32_t(extend));
10964 12 }
10965 12 }
10966 4 }
10967 else if(keepdata)
10968 {
10969 memset(frozenspr, 0, sizeof(frozenspr));
10970 memset(frozen_waterspr, 0, sizeof(frozen_waterspr));
10971 memset(onfirespr, 0, sizeof(onfirespr));
10972 memset(onfire_waterspr, 0, sizeof(onfire_waterspr));
10973 memset(diggingspr, 0, sizeof(diggingspr));
10974 memset(usingrodspr, 0, sizeof(usingrodspr));
10975 memset(usingcanespr, 0, sizeof(usingcanespr));
10976 memset(pushingspr, 0, sizeof(pushingspr));
10977 memset(liftingspr, 0, sizeof(liftingspr));
10978 memset(liftingwalkspr, 0, sizeof(liftingwalkspr));
10979 memset(stunnedspr, 0, sizeof(stunnedspr));
10980 memset(stunned_waterspr, 0, sizeof(stunned_waterspr));
10981 memset(fallingspr, 0, sizeof(fallingspr));
10982 memset(shockedspr, 0, sizeof(shockedspr));
10983 memset(shocked_waterspr, 0, sizeof(shocked_waterspr));
10984 memset(pullswordspr, 0, sizeof(pullswordspr));
10985 memset(readingspr, 0, sizeof(readingspr));
10986 memset(slash180spr, 0, sizeof(slash180spr));
10987 memset(slashZ4spr, 0, sizeof(slashZ4spr));
10988 memset(dashspr, 0, sizeof(dashspr));
10989 memset(bonkspr, 0, sizeof(bonkspr));
10990 memset(medallionsprs, 0, sizeof(medallionsprs));
10991 memset(holdspr[0][2], 0, sizeof(holdspr[0][2])); //Sword hold (Land)
10992 memset(holdspr[1][2], 0, sizeof(holdspr[1][2])); //Sword hold (Water)
10993 for(int32_t q = 0; q < 4; ++q)
10994 {
10995 for(int32_t p = 0; p < 3; ++p)
10996 {
10997 drowningspr[q][p] = divespr[q][p];
10998 drowning_lavaspr[q][p] = divespr[q][p];
10999 }
11000 }
11001 }
11002
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if (v_herosprites > 8)
11003 {
11004
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
11005 {
11006
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
11007 return qe_invalid;
11008
11009
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
11010 return qe_invalid;
11011
11012
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
11013 return qe_invalid;
11014
11015
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
11016 {
11017 16 setSprite(sideswimspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11018 16 }
11019 16 }
11020 4 }
11021 else if (keepdata)
11022 {
11023 memset(sideswimspr, 0, sizeof(sideswimspr));
11024 }
11025
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if (v_herosprites > 9)
11026 {
11027
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
11028 {
11029
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
11030 return qe_invalid;
11031
11032
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
11033 return qe_invalid;
11034
11035
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
11036 return qe_invalid;
11037
11038
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
11039 {
11040 16 setSprite(sideswimslashspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11041 16 }
11042 16 }
11043
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
11044 {
11045
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
11046 return qe_invalid;
11047
11048
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
11049 return qe_invalid;
11050
11051
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
11052 return qe_invalid;
11053
11054
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
11055 {
11056 16 setSprite(sideswimstabspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11057 16 }
11058 16 }
11059
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
11060 {
11061
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
11062 return qe_invalid;
11063
11064
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
11065 return qe_invalid;
11066
11067
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
11068 return qe_invalid;
11069
11070
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
11071 {
11072 16 setSprite(sideswimpoundspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11073 16 }
11074 16 }
11075
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
11076 {
11077
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
11078 return qe_invalid;
11079
11080
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
11081 return qe_invalid;
11082
11083
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
11084 return qe_invalid;
11085
11086
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
11087 {
11088 16 setSprite(sideswimchargespr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11089 16 }
11090 16 }
11091 4 }
11092 else if (keepdata)
11093 {
11094 memset(sideswimslashspr, 0, sizeof(sideswimslashspr));
11095 memset(sideswimstabspr, 0, sizeof(sideswimstabspr));
11096 memset(sideswimpoundspr, 0, sizeof(sideswimpoundspr));
11097 memset(sideswimchargespr, 0, sizeof(sideswimchargespr));
11098 }
11099
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if (v_herosprites > 10)
11100 {
11101
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
11102 {
11103 int32_t hmr;
11104
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_igetl(&hmr,f,keepdata))
11105 return qe_invalid;
11106
11107
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
11108 {
11109 16 hammeroffsets[q] = hmr;
11110 16 }
11111 16 }
11112 4 }
11113 else if (keepdata)
11114 {
11115 for(int32_t q = 0; q < 4; ++q) hammeroffsets[q] = 0;
11116 }
11117
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if (v_herosprites > 11)
11118 {
11119
2/2
✓ Branch 0 taken 12 times.
✓ Branch 1 taken 4 times.
16 for(int32_t q = 0; q < 3; ++q)
11120 {
11121
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_igetl(&tile,f,keepdata))
11122 return qe_invalid;
11123
11124
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if(!p_getc(&flip,f,keepdata))
11125 return qe_invalid;
11126
11127
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if(!p_getc(&extend,f,keepdata))
11128 return qe_invalid;
11129
11130
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if(keepdata)
11131 {
11132 12 setSprite(sideswimholdspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11133 12 }
11134 12 }
11135 4 }
11136 else if (keepdata)
11137 {
11138 memset(sideswimholdspr, 0, sizeof(sideswimholdspr));
11139 }
11140
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if (v_herosprites > 12)
11141 {
11142
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_igetl(&tile,f,keepdata))
11143 return qe_invalid;
11144
11145
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_getc(&flip,f,keepdata))
11146 return qe_invalid;
11147
11148
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_getc(&extend,f,keepdata))
11149 return qe_invalid;
11150
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if (keepdata)
11151 {
11152 4 setSprite(sideswimcastingspr, int32_t(tile), int32_t(flip), int32_t(extend));
11153 4 }
11154
11155 4 }
11156 else if (keepdata)
11157 {
11158 memset(sideswimcastingspr, 0, sizeof(sideswimcastingspr));
11159 }
11160
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if (v_herosprites > 13)
11161 {
11162
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
11163 {
11164
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
11165 return qe_invalid;
11166
11167
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
11168 return qe_invalid;
11169
11170
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
11171 return qe_invalid;
11172
11173
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
11174 {
11175 16 setSprite(sidedrowningspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11176 16 }
11177 16 }
11178 4 }
11179 else if (keepdata)
11180 {
11181 memset(sidedrowningspr, 0, sizeof(sidedrowningspr));
11182 }
11183
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if (v_herosprites > 14)
11184 {
11185
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t q = 0; q < 4; ++q)
11186 {
11187
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if(!p_igetl(&tile,f,keepdata))
11188 return qe_invalid;
11189
11190
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&flip,f,keepdata))
11191 return qe_invalid;
11192
11193
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&extend,f,keepdata))
11194 return qe_invalid;
11195
11196
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(keepdata)
11197 {
11198 16 setSprite(revslashspr[q], int32_t(tile), int32_t(flip), int32_t(extend));
11199 16 }
11200 16 }
11201 4 }
11202 else if (keepdata)
11203 {
11204 memset(revslashspr, 0, sizeof(revslashspr));
11205 }
11206
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if (v_herosprites > 7)
11207 {
11208 4 int32_t num_defense = wMax;
11209 4 byte def = 0;
11210
11211 //Set num_defense accordingly if changes to enum require version upgrade - Jman
11212 /*if(v_herosprites > [x])
11213 * {
11214 * num_defense = 146 //value of wMax on version 8
11215 * }
11216 */
11217
11218
2/2
✓ Branch 0 taken 584 times.
✓ Branch 1 taken 4 times.
588 for (int32_t q = 0; q < num_defense; q++)
11219 {
11220
1/2
✓ Branch 0 taken 584 times.
✗ Branch 1 not taken.
584 if (!p_getc(&def, f, keepdata))
11221 return qe_invalid;
11222
11223
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 584 times.
584 if (keepdata)
11224 {
11225 584 hero_defence[q] = def;
11226 584 }
11227 584 }
11228 4 }
11229 else if (keepdata)
11230 {
11231 int32_t num_defense = wMax;
11232 for (int32_t q = 0; q < num_defense; q++)
11233 {
11234 hero_defence[q] = 0;
11235 }
11236 }
11237 4 }
11238
11239 4 return 0;
11240 4 }
11241
11242
11243 63 int32_t readherosprites(PACKFILE *f, zquestheader *Header, bool keepdata)
11244 {
11245 //these are here to bypass compiler warnings about unused arguments
11246 63 Header=Header;
11247
11248 dword dummy;
11249 63 word s_version=0, s_cversion=0;
11250
11251 //section version info
11252
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(!p_igetw(&s_version,f,true))
11253 {
11254 return qe_invalid;
11255 }
11256
11257 63 FFCore.quest_format[vHeroSprites] = s_version;
11258
11259 //al_trace("Player sprites version %d\n", s_version);
11260
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_cversion,f,true))
11261 {
11262 return qe_invalid;
11263 }
11264
11265 //section size
11266
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy,f,true))
11267 {
11268 return qe_invalid;
11269 }
11270
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if ( s_version >= 6 )
11271 {
11272 //al_trace("Reading Player Sprites v6\n");
11273 4 return readherosprites3(f, s_version, dummy, keepdata);
11274 }
11275 59 else return readherosprites2(f, s_version, dummy, keepdata);
11276 63 }
11277
11278 63 int32_t readsubscreens(PACKFILE *f, zquestheader *Header, bool keepdata)
11279 {
11280 int32_t dummy;
11281 63 word s_version=0, s_cversion=0;
11282
11283 //section version info
11284
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(!p_igetw(&s_version,f,true))
11285 {
11286 return qe_invalid;
11287 }
11288
11289 63 FFCore.quest_format[vSubscreen] = s_version;
11290
11291 //al_trace("Subscreens version %d\n", s_version);
11292
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_cversion,f,true))
11293 {
11294 return qe_invalid;
11295 }
11296
11297 //section size
11298
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy,f,true))
11299 {
11300 return qe_invalid;
11301 }
11302
11303 //finally... section data
11304
2/2
✓ Branch 0 taken 8064 times.
✓ Branch 1 taken 63 times.
8127 for(int32_t i=0; i<MAXCUSTOMSUBSCREENS; i++)
11305 {
11306 8064 int32_t ret = read_one_subscreen(f, Header, keepdata, i, s_version, s_cversion);
11307
11308
1/2
✓ Branch 0 taken 8064 times.
✗ Branch 1 not taken.
8064 if(ret!=0) return ret;
11309 8064 }
11310
11311 63 return 0;
11312 63 }
11313
11314 8064 int32_t read_one_subscreen(PACKFILE *f, zquestheader *, bool keepdata, int32_t i, word s_version, word)
11315 {
11316 8064 int32_t numsub=0;
11317 8064 byte temp_ss=0;
11318 subscreen_object temp_sub_stack;
11319 8064 subscreen_object *temp_sub = &temp_sub_stack;
11320
11321 char tempname[64];
11322
11323
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8064 times.
8064 if(!pfread(tempname,64,f,true))
11324 {
11325 return qe_invalid;
11326 }
11327
11328
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8064 times.
8064 if(s_version > 1)
11329 {
11330
1/2
✓ Branch 0 taken 8064 times.
✗ Branch 1 not taken.
8064 if(!p_getc(&temp_ss,f,keepdata))
11331 {
11332 return qe_invalid;
11333 }
11334 8064 }
11335
11336
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8064 times.
8064 if(s_version < 4)
11337 {
11338 uint8_t tmp=0;
11339
11340 if(!p_getc(&tmp,f,true))
11341 {
11342 return qe_invalid;
11343 }
11344
11345 numsub = (int32_t)tmp;
11346 }
11347 else
11348 {
11349 word tmp;
11350
11351
1/2
✓ Branch 0 taken 8064 times.
✗ Branch 1 not taken.
8064 if(!p_igetw(&tmp, f, true))
11352 {
11353 return qe_invalid;
11354 }
11355
11356 8064 numsub = (int32_t)tmp;
11357 }
11358
11359 int32_t j;
11360
11361
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 15980 times.
✓ Branch 2 taken 7916 times.
✓ Branch 3 taken 8064 times.
15980 for(j=0; (j<MAXSUBSCREENITEMS&&j<numsub); j++)
11362 {
11363
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 7916 times.
7916 if(keepdata)
11364 {
11365 7916 memset(temp_sub,0,sizeof(subscreen_object));
11366
11367
2/2
✓ Branch 0 taken 890 times.
✓ Branch 1 taken 7026 times.
7916 switch(custom_subscreen[i].objects[j].type)
11368 {
11369 case ssoTEXT:
11370 case ssoTEXTBOX:
11371 case ssoCURRENTITEMTEXT:
11372 case ssoCURRENTITEMCLASSTEXT:
11373
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 890 times.
✓ Branch 2 taken 890 times.
✗ Branch 3 not taken.
890 if(custom_subscreen[i].objects[j].dp1 != NULL) delete [](char *)custom_subscreen[i].objects[j].dp1;
11374
11375 //fall through
11376 default:
11377 7916 memset(&custom_subscreen[i].objects[j],0,sizeof(subscreen_object));
11378 7916 break;
11379 }
11380 7916 }
11381
11382
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_getc(&(temp_sub->type),f,true))
11383 {
11384 return qe_invalid;
11385 }
11386
11387
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_getc(&(temp_sub->pos),f,keepdata))
11388 {
11389 return qe_invalid;
11390 }
11391
11392
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(s_version < 5)
11393 {
11394 switch(temp_sub->pos)
11395 {
11396 case 0:
11397 temp_sub->pos = sspUP | sspDOWN | sspSCROLLING;
11398 break;
11399
11400 case 1:
11401 temp_sub->pos = sspUP;
11402 break;
11403
11404 case 2:
11405 temp_sub->pos = sspDOWN;
11406 break;
11407
11408 default:
11409 temp_sub->pos = 0;
11410 }
11411 }
11412
11413
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetw(&(temp_sub->x),f,keepdata))
11414 {
11415 return qe_invalid;
11416 }
11417
11418
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetw(&(temp_sub->y),f,keepdata))
11419 {
11420 return qe_invalid;
11421 }
11422
11423
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetw(&(temp_sub->w),f,keepdata))
11424 {
11425 return qe_invalid;
11426 }
11427
11428
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetw(&(temp_sub->h),f,keepdata))
11429 {
11430 return qe_invalid;
11431 }
11432
11433
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_getc(&(temp_sub->colortype1),f,keepdata))
11434 {
11435 return qe_invalid;
11436 }
11437
11438
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetw(&(temp_sub->color1),f,keepdata))
11439 {
11440 return qe_invalid;
11441 }
11442
11443
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_getc(&(temp_sub->colortype2),f,keepdata))
11444 {
11445 return qe_invalid;
11446 }
11447
11448
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetw(&(temp_sub->color2),f,keepdata))
11449 {
11450 return qe_invalid;
11451 }
11452
11453
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_getc(&(temp_sub->colortype3),f,keepdata))
11454 {
11455 return qe_invalid;
11456 }
11457
11458
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetw(&(temp_sub->color3),f,keepdata))
11459 {
11460 return qe_invalid;
11461 }
11462
11463
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetd(&(temp_sub->d1),f,keepdata))
11464 {
11465 return qe_invalid;
11466 }
11467
11468
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetd(&(temp_sub->d2),f,keepdata))
11469 {
11470 return qe_invalid;
11471 }
11472
11473
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetd(&(temp_sub->d3),f,keepdata))
11474 {
11475 return qe_invalid;
11476 }
11477
11478
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetd(&(temp_sub->d4),f,keepdata))
11479 {
11480 return qe_invalid;
11481 }
11482
11483
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetd(&(temp_sub->d5),f,keepdata))
11484 {
11485 return qe_invalid;
11486 }
11487
11488
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetd(&(temp_sub->d6),f,keepdata))
11489 {
11490 return qe_invalid;
11491 }
11492
11493
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetd(&(temp_sub->d7),f,keepdata))
11494 {
11495 return qe_invalid;
11496 }
11497
11498
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetd(&(temp_sub->d8),f,keepdata))
11499 {
11500 return qe_invalid;
11501 }
11502
11503
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetd(&(temp_sub->d9),f,keepdata))
11504 {
11505 return qe_invalid;
11506 }
11507
11508
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetd(&(temp_sub->d10),f,keepdata))
11509 {
11510 return qe_invalid;
11511 }
11512
11513
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 7916 times.
7916 if(s_version < 2)
11514 {
11515 if(!p_igetl(&(temp_sub->speed),f,keepdata))
11516 {
11517 return qe_invalid;
11518 }
11519
11520 if(!p_igetl(&(temp_sub->delay),f,keepdata))
11521 {
11522 return qe_invalid;
11523 }
11524
11525 if(!p_igetl(&(temp_sub->frame),f,keepdata))
11526 {
11527 return qe_invalid;
11528 }
11529 }
11530 else
11531 {
11532
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_getc(&(temp_sub->speed),f,keepdata))
11533 {
11534 return qe_invalid;
11535 }
11536
11537
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_getc(&(temp_sub->delay),f,keepdata))
11538 {
11539 return qe_invalid;
11540 }
11541
11542
1/2
✓ Branch 0 taken 7916 times.
✗ Branch 1 not taken.
7916 if(!p_igetw(&(temp_sub->frame),f,keepdata))
11543 {
11544 return qe_invalid;
11545 }
11546 }
11547
11548 7916 int32_t temp_size=0;
11549
11550 // bool deletets = false;
11551
4/4
✓ Branch 0 taken 3512 times.
✓ Branch 1 taken 1022 times.
✓ Branch 2 taken 3264 times.
✓ Branch 3 taken 118 times.
7916 switch(temp_sub->type)
11552 {
11553 case ssoTEXT:
11554 case ssoTEXTBOX:
11555 case ssoCURRENTITEMTEXT:
11556 case ssoCURRENTITEMCLASSTEXT:
11557 word temptempsize;
11558 /*uint8_t temp1;
11559 uint8_t temp2;
11560 temp2 = 0;
11561 if(!p_getc(&temp1,f,true))
11562 {
11563 return qe_invalid;
11564 }
11565 if(temp1)
11566 {
11567
11568 if(!p_getc(&temp2,f,true))
11569 {
11570 return qe_invalid;
11571 }
11572 }*/
11573
11574
1/2
✓ Branch 0 taken 1022 times.
✗ Branch 1 not taken.
1022 if(!p_igetw(&temptempsize,f,true))
11575 {
11576 return qe_invalid;
11577 }
11578
11579 //temptempsize = temp1 + (temp2 << 8);
11580 1022 temp_size = (int32_t)temptempsize;
11581
11582 //if(temp_sub->dp1!=NULL) delete[] temp_sub->dp1;
11583
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1022 times.
1022 if(keepdata)
11584 {
11585 1022 uint32_t char_length = temp_size+1;
11586 1022 temp_sub->dp1 = new char[char_length]; //memory not freed
11587
11588 //deletets = true; //obsolete
11589 1022 }
11590
11591
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1022 times.
1022 if(temp_size)
11592 {
11593
1/2
✓ Branch 0 taken 1022 times.
✗ Branch 1 not taken.
1022 if(!pfread(temp_sub->dp1,temp_size+1,f,keepdata))
11594 {
11595 return qe_invalid;
11596 }
11597 1022 }
11598
11599 1022 break;
11600
11601 case ssoLIFEMETER:
11602
1/2
✓ Branch 0 taken 118 times.
✗ Branch 1 not taken.
118 if(get_bit(deprecated_rules, 12) != 0) // qr_24HC
11603 temp_sub->d3 = 1;
11604
11605
1/2
✓ Branch 0 taken 118 times.
✗ Branch 1 not taken.
118 if(!p_getc(&(temp_sub->dp1),f,keepdata))
11606 {
11607 return qe_invalid;
11608 }
11609
11610 118 break;
11611
11612
11613 case ssoCURRENTITEM:
11614
11615
1/2
✓ Branch 0 taken 3512 times.
✗ Branch 1 not taken.
3512 if(s_version < 6)
11616 {
11617 switch(temp_sub->d1)
11618 {
11619 case ssiBOMB:
11620 temp_sub->d1 = itype_bomb;
11621 break;
11622
11623 case ssiSWORD:
11624 temp_sub->d1 = itype_sword;
11625 break;
11626
11627 case ssiSHIELD:
11628 temp_sub->d1 = itype_shield;
11629 break;
11630
11631 case ssiCANDLE:
11632 temp_sub->d1 = itype_candle;
11633 break;
11634
11635 case ssiLETTER:
11636 temp_sub->d1 = itype_letter;
11637 break;
11638
11639 case ssiPOTION:
11640 temp_sub->d1 = itype_potion;
11641 break;
11642
11643 case ssiLETTERPOTION:
11644 temp_sub->d1 = itype_letterpotion;
11645 break;
11646
11647 case ssiBOW:
11648 temp_sub->d1 = itype_bow;
11649 break;
11650
11651 case ssiARROW:
11652 temp_sub->d1 = itype_arrow;
11653 break;
11654
11655 case ssiBOWANDARROW:
11656 temp_sub->d1 = itype_bowandarrow;
11657 break;
11658
11659 case ssiBAIT:
11660 temp_sub->d1 = itype_bait;
11661 break;
11662
11663 case ssiRING:
11664 temp_sub->d1 = itype_ring;
11665 break;
11666
11667 case ssiBRACELET:
11668 temp_sub->d1 = itype_bracelet;
11669 break;
11670
11671 case ssiMAP:
11672 temp_sub->d1 = itype_map;
11673 break;
11674
11675 case ssiCOMPASS:
11676 temp_sub->d1 = itype_compass;
11677 break;
11678
11679 case ssiBOSSKEY:
11680 temp_sub->d1 = itype_bosskey;
11681 break;
11682
11683 case ssiMAGICKEY:
11684 temp_sub->d1 = itype_magickey;
11685 break;
11686
11687 case ssiBRANG:
11688 temp_sub->d1 = itype_brang;
11689 break;
11690
11691 case ssiWAND:
11692 temp_sub->d1 = itype_wand;
11693 break;
11694
11695 case ssiRAFT:
11696 temp_sub->d1 = itype_raft;
11697 break;
11698
11699 case ssiLADDER:
11700 temp_sub->d1 = itype_ladder;
11701 break;
11702
11703 case ssiWHISTLE:
11704 temp_sub->d1 = itype_whistle;
11705 break;
11706
11707 case ssiBOOK:
11708 temp_sub->d1 = itype_book;
11709 break;
11710
11711 case ssiWALLET:
11712 temp_sub->d1 = itype_wallet;
11713 break;
11714
11715 case ssiSBOMB:
11716 temp_sub->d1 = itype_sbomb;
11717 break;
11718
11719 case ssiHCPIECE:
11720 temp_sub->d1 = itype_heartpiece;
11721 break;
11722
11723 case ssiAMULET:
11724 temp_sub->d1 = itype_amulet;
11725 break;
11726
11727 case ssiFLIPPERS:
11728 temp_sub->d1 = itype_flippers;
11729 break;
11730
11731 case ssiHOOKSHOT:
11732 temp_sub->d1 = itype_hookshot;
11733 break;
11734
11735 case ssiLENS:
11736 temp_sub->d1 = itype_lens;
11737 break;
11738
11739 case ssiHAMMER:
11740 temp_sub->d1 = itype_hammer;
11741 break;
11742
11743 case ssiBOOTS:
11744 temp_sub->d1 = itype_boots;
11745 break;
11746
11747 case ssiDINSFIRE:
11748 temp_sub->d1 = itype_dinsfire;
11749 break;
11750
11751 case ssiFARORESWIND:
11752 temp_sub->d1 = itype_faroreswind;
11753 break;
11754
11755 case ssiNAYRUSLOVE:
11756 temp_sub->d1 = itype_nayruslove;
11757 break;
11758
11759 case ssiQUIVER:
11760 temp_sub->d1 = itype_quiver;
11761 break;
11762
11763 case ssiBOMBBAG:
11764 temp_sub->d1 = itype_bombbag;
11765 break;
11766
11767 case ssiCBYRNA:
11768 temp_sub->d1 = itype_cbyrna;
11769 break;
11770
11771 case ssiROCS:
11772 temp_sub->d1 = itype_rocs;
11773 break;
11774
11775 case ssiHOVERBOOTS:
11776 temp_sub->d1 = itype_hoverboots;
11777 break;
11778
11779 case ssiSPINSCROLL:
11780 temp_sub->d1 = itype_spinscroll;
11781 break;
11782
11783 case ssiCROSSSCROLL:
11784 temp_sub->d1 = itype_crossscroll;
11785 break;
11786
11787 case ssiQUAKESCROLL:
11788 temp_sub->d1 = itype_quakescroll;
11789 break;
11790
11791 case ssiWHISPRING:
11792 temp_sub->d1 = itype_whispring;
11793 break;
11794
11795 case ssiCHARGERING:
11796 temp_sub->d1 = itype_chargering;
11797 break;
11798
11799 case ssiPERILSCROLL:
11800 temp_sub->d1 = itype_perilscroll;
11801 break;
11802
11803 case ssiWEALTHMEDAL:
11804 temp_sub->d1 = itype_wealthmedal;
11805 break;
11806
11807 case ssiHEARTRING:
11808 temp_sub->d1 = itype_heartring;
11809 break;
11810
11811 case ssiMAGICRING:
11812 temp_sub->d1 = itype_magicring;
11813 break;
11814
11815 case ssiSPINSCROLL2:
11816 temp_sub->d1 = itype_spinscroll2;
11817 break;
11818
11819 case ssiQUAKESCROLL2:
11820 temp_sub->d1 = itype_quakescroll2;
11821 break;
11822
11823 case ssiAGONY:
11824 temp_sub->d1 = itype_agony;
11825 break;
11826
11827 case ssiSTOMPBOOTS:
11828 temp_sub->d1 = itype_stompboots;
11829 break;
11830
11831 case ssiWHIMSICALRING:
11832 temp_sub->d1 = itype_whimsicalring;
11833 break;
11834
11835 case ssiPERILRING:
11836 temp_sub->d1 = itype_perilring;
11837 break;
11838
11839 default:
11840 temp_sub->d1 += itype_custom1 - ssiMAX;
11841 }
11842 }
11843
11844 //fall-through
11845 default:
11846
1/2
✓ Branch 0 taken 6776 times.
✗ Branch 1 not taken.
6776 if(!p_getc(&(temp_sub->dp1),f,keepdata))
11847 {
11848 return qe_invalid;
11849 }
11850
11851 6776 break;
11852 }
11853
11854
2/2
✓ Branch 0 taken 2291 times.
✓ Branch 1 taken 5625 times.
7916 if(s_version < 7)
11855 {
11856
1/3
✓ Branch 0 taken 5625 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
5625 switch(temp_sub->type)
11857 {
11858 case ssoMAGICGAUGE:
11859 {
11860 if(!temp_sub->d9)
11861 temp_sub->d9 = -1; //-1 now represents 'always'
11862 break;
11863 }
11864 case ssoLIFEGAUGE:
11865 temp_sub->d9 = 0; //Unused, doesn't do anything? Clear it...
11866 break;
11867 }
11868 5625 }
11869
11870
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 7916 times.
7916 if(keepdata)
11871 {
11872
3/3
✓ Branch 0 taken 1022 times.
✓ Branch 1 taken 6670 times.
✓ Branch 2 taken 224 times.
7916 switch(temp_sub->type)
11873 {
11874 case ssoTEXT:
11875 case ssoTEXTBOX:
11876 case ssoCURRENTITEMTEXT:
11877 case ssoCURRENTITEMCLASSTEXT:
11878
1/4
✓ Branch 0 taken 1022 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1022 if(custom_subscreen[i].objects[j].dp1 != NULL) delete[](char *)custom_subscreen[i].objects[j].dp1;
11879
11880 1022 memcpy(&custom_subscreen[i].objects[j],temp_sub,sizeof(subscreen_object));
11881 1022 custom_subscreen[i].objects[j].dp1 = NULL;
11882 1022 custom_subscreen[i].objects[j].dp1 = new char[temp_size+1];
11883 1022 strcpy((char*)custom_subscreen[i].objects[j].dp1,(char*)temp_sub->dp1);
11884 1022 break;
11885
11886 case ssoCOUNTER:
11887
1/2
✓ Branch 0 taken 224 times.
✗ Branch 1 not taken.
224 if(s_version<3)
11888 {
11889 temp_sub->d6=(temp_sub->d6?1:0)+(temp_sub->d8?2:0);
11890 temp_sub->d8=0;
11891 }
11892
11893 default:
11894 6894 memcpy(&custom_subscreen[i].objects[j],temp_sub,sizeof(subscreen_object));
11895 6894 break;
11896 }
11897
11898 7916 strcpy(custom_subscreen[i].name, tempname);
11899 7916 custom_subscreen[i].ss_type = temp_ss;
11900 7916 }
11901 7916 }
11902
11903
2/2
✓ Branch 0 taken 2056468 times.
✓ Branch 1 taken 8064 times.
2064532 for(j=numsub; j<MAXSUBSCREENITEMS; j++)
11904 {
11905
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2056468 times.
2056468 if(keepdata)
11906 {
11907 //clear all unused object in this subscreen -DD
11908
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2056468 times.
2056468 switch(custom_subscreen[i].objects[j].type)
11909 {
11910 case ssoTEXT:
11911 case ssoTEXTBOX:
11912 case ssoCURRENTITEMTEXT:
11913 case ssoCURRENTITEMCLASSTEXT:
11914 if(custom_subscreen[i].objects[j].dp1 != NULL) delete [](char *)custom_subscreen[i].objects[j].dp1;
11915
11916 //fall through
11917 default:
11918 2056468 memset(&custom_subscreen[i].objects[j],0,sizeof(subscreen_object));
11919 2056468 break;
11920 }
11921 2056468 }
11922 2056468 }
11923
11924 8064 return 0;
11925 8064 }
11926
11927 1664 void reset_subscreen(subscreen_group *tempss)
11928 {
11929
2/2
✓ Branch 0 taken 425984 times.
✓ Branch 1 taken 1664 times.
427648 for(int32_t i=0; i<MAXSUBSCREENITEMS; ++i)
11930 {
11931
2/2
✓ Branch 0 taken 89 times.
✓ Branch 1 taken 425895 times.
425984 switch(tempss->objects[i].type)
11932 {
11933 case ssoTEXT:
11934 case ssoTEXTBOX:
11935 case ssoCURRENTITEMTEXT:
11936 case ssoCURRENTITEMCLASSTEXT:
11937
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 89 times.
✓ Branch 2 taken 89 times.
✗ Branch 3 not taken.
89 if(tempss->objects[i].dp1 != NULL) delete [](char *)tempss->objects[i].dp1;
11938
11939 //fall through
11940 default:
11941 425984 memset(&tempss->objects[i],0,sizeof(subscreen_object));
11942 425984 break;
11943 }
11944 425984 }
11945 1664 }
11946
11947 13 void reset_subscreens()
11948 {
11949
2/2
✓ Branch 0 taken 1664 times.
✓ Branch 1 taken 13 times.
1677 for(int32_t i=0; i<MAXCUSTOMSUBSCREENS; ++i)
11950 {
11951 1664 reset_subscreen(&custom_subscreen[i]);
11952 1664 }
11953 13 }
11954
11955 13 int32_t setupsubscreens()
11956 {
11957 13 reset_subscreens();
11958 13 int32_t tempsubscreen=zinit.subscreen;
11959 subscreen_object *tempsub;
11960
11961
1/2
✓ Branch 0 taken 13 times.
✗ Branch 1 not taken.
13 if(tempsubscreen>=ssdtMAX)
11962 {
11963 tempsubscreen=0;
11964 }
11965
11966
1/3
✗ Branch 0 not taken.
✓ Branch 1 taken 13 times.
✗ Branch 2 not taken.
13 switch(tempsubscreen)
11967 {
11968 case ssdtOLD:
11969 case ssdtNEWSUBSCR:
11970 case ssdtREV2:
11971 case ssdtBSZELDA:
11972 case ssdtBSZELDAMODIFIED:
11973 case ssdtBSZELDAENHANCED:
11974 case ssdtBSZELDACOMPLETE:
11975 {
11976 13 tempsub = default_subscreen_active[tempsubscreen][0];
11977 int32_t i;
11978
11979
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 858 times.
✓ Branch 2 taken 845 times.
✓ Branch 3 taken 13 times.
858 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
11980 {
11981
2/3
✓ Branch 0 taken 42 times.
✓ Branch 1 taken 803 times.
✗ Branch 2 not taken.
845 switch(tempsub[i].type)
11982 {
11983 case ssoTEXT:
11984 case ssoTEXTBOX:
11985 case ssoCURRENTITEMTEXT:
11986 case ssoCURRENTITEMCLASSTEXT:
11987
1/4
✓ Branch 0 taken 42 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
42 if(custom_subscreen[0].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[0].objects[i].dp1;
11988
11989 42 memcpy(&custom_subscreen[0].objects[i],&tempsub[i],sizeof(subscreen_object));
11990 42 custom_subscreen[0].objects[i].dp1 = NULL;
11991 42 custom_subscreen[0].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
11992 42 strcpy((char*)custom_subscreen[0].objects[i].dp1,(char*)tempsub[i].dp1);
11993 42 break;
11994
11995 case ssoLIFEMETER:
11996 {
11997 memcpy(&custom_subscreen[0].objects[i],&tempsub[i],sizeof(subscreen_object));
11998
11999 if(get_bit(deprecated_rules, 12) != 0)
12000 custom_subscreen[0].objects[i].d3=1;
12001 else
12002 custom_subscreen[0].objects[i].d3=0;
12003
12004 break;
12005 }
12006 /*
12007 case ssoTRIFRAME:
12008 {
12009 memcpy(&custom_subscreen[0].objects[i],&tempsub[i],sizeof(subscreen_object));
12010 custom_subscreen[0].objects[i].d1 = 8594;
12011 custom_subscreen[0].objects[i].d2 = 8;
12012 custom_subscreen[0].objects[i].d3 = 8771;
12013 custom_subscreen[0].objects[i].d4 = 8;
12014 custom_subscreen[0].objects[i].d5 = 1;
12015 custom_subscreen[0].objects[i].d6 = 1;
12016 break;
12017 }*/
12018
12019 default:
12020 803 memcpy(&custom_subscreen[0].objects[i],&tempsub[i],sizeof(subscreen_object));
12021 803 break;
12022 }
12023 845 }
12024
12025 13 custom_subscreen[0].ss_type=sstACTIVE;
12026 13 sprintf(custom_subscreen[0].name, "Active Subscreen (Triforce)");
12027 13 tempsub = default_subscreen_active[tempsubscreen][1];
12028
12029
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 858 times.
✓ Branch 2 taken 845 times.
✓ Branch 3 taken 13 times.
858 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
12030 {
12031
2/3
✓ Branch 0 taken 55 times.
✓ Branch 1 taken 790 times.
✗ Branch 2 not taken.
845 switch(tempsub[i].type)
12032 {
12033 case ssoTEXT:
12034 case ssoTEXTBOX:
12035 case ssoCURRENTITEMTEXT:
12036 case ssoCURRENTITEMCLASSTEXT:
12037
1/4
✓ Branch 0 taken 55 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
55 if(custom_subscreen[1].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[1].objects[i].dp1;
12038
12039 55 memcpy(&custom_subscreen[1].objects[i],&tempsub[i],sizeof(subscreen_object));
12040 55 custom_subscreen[1].objects[i].dp1 = NULL;
12041 55 custom_subscreen[1].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
12042 55 strcpy((char*)custom_subscreen[1].objects[i].dp1,(char*)tempsub[i].dp1);
12043 55 break;
12044
12045 case ssoLIFEMETER:
12046 {
12047 memcpy(&custom_subscreen[1].objects[i],&tempsub[i],sizeof(subscreen_object));
12048
12049 if(get_bit(deprecated_rules, 12) != 0)
12050 custom_subscreen[1].objects[i].d3=1;
12051 else
12052 custom_subscreen[1].objects[i].d3=0;
12053
12054 break;
12055 }
12056 /*
12057 case ssoTRIFRAME:
12058 {
12059 custom_subscreen[1].objects[i].d1 = 8594;
12060 custom_subscreen[1].objects[i].d2 = 8;
12061 custom_subscreen[1].objects[i].d3 = 8771;
12062 custom_subscreen[1].objects[i].d4 = 8;
12063 custom_subscreen[1].objects[i].d5 = 1;
12064 custom_subscreen[1].objects[i].d6 = 1;
12065 break;
12066 }*/
12067
12068 default:
12069 790 memcpy(&custom_subscreen[1].objects[i],&tempsub[i],sizeof(subscreen_object));
12070 790 break;
12071 }
12072 845 }
12073
12074 13 custom_subscreen[1].ss_type=sstACTIVE;
12075 13 sprintf(custom_subscreen[1].name, "Active Subscreen (Dungeon Map)");
12076 // memset(&custom_subscreen[1].objects[i],0,sizeof(subscreen_object));
12077 13 tempsub = default_subscreen_passive[tempsubscreen][0];
12078
12079
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 273 times.
✓ Branch 2 taken 260 times.
✓ Branch 3 taken 13 times.
273 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
12080 {
12081
3/3
✓ Branch 0 taken 39 times.
✓ Branch 1 taken 208 times.
✓ Branch 2 taken 13 times.
260 switch(tempsub[i].type)
12082 {
12083 case ssoTEXT:
12084 case ssoTEXTBOX:
12085 case ssoCURRENTITEMTEXT:
12086 case ssoCURRENTITEMCLASSTEXT:
12087
1/4
✓ Branch 0 taken 39 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
39 if(custom_subscreen[2].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[2].objects[i].dp1;
12088
12089 39 memcpy(&custom_subscreen[2].objects[i],&tempsub[i],sizeof(subscreen_object));
12090 39 custom_subscreen[2].objects[i].dp1 = NULL;
12091 39 custom_subscreen[2].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
12092 39 strcpy((char*)custom_subscreen[2].objects[i].dp1,(char*)tempsub[i].dp1);
12093 39 break;
12094
12095 case ssoLIFEMETER:
12096 {
12097 13 memcpy(&custom_subscreen[2].objects[i],&tempsub[i],sizeof(subscreen_object));
12098
12099
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 13 times.
13 if(get_bit(deprecated_rules, 12) != 0)
12100 custom_subscreen[2].objects[i].d3=1;
12101 else
12102 13 custom_subscreen[2].objects[i].d3=0;
12103
12104 13 break;
12105 }
12106
12107 default:
12108 208 memcpy(&custom_subscreen[2].objects[i],&tempsub[i],sizeof(subscreen_object));
12109 208 break;
12110 }
12111 260 }
12112
12113 13 custom_subscreen[2].ss_type=sstPASSIVE;
12114 13 sprintf(custom_subscreen[2].name, "Passive Subscreen (Magic)");
12115 // memset(&custom_subscreen[2].objects[i],0,sizeof(subscreen_object));
12116 13 tempsub = default_subscreen_passive[tempsubscreen][1];
12117
12118
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 260 times.
✓ Branch 2 taken 247 times.
✓ Branch 3 taken 13 times.
260 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
12119 {
12120
3/3
✓ Branch 0 taken 39 times.
✓ Branch 1 taken 195 times.
✓ Branch 2 taken 13 times.
247 switch(tempsub[i].type)
12121 {
12122 case ssoTEXT:
12123 case ssoTEXTBOX:
12124 case ssoCURRENTITEMTEXT:
12125 case ssoCURRENTITEMCLASSTEXT:
12126
1/4
✓ Branch 0 taken 39 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
39 if(custom_subscreen[3].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[3].objects[i].dp1;
12127
12128 39 memcpy(&custom_subscreen[3].objects[i],&tempsub[i],sizeof(subscreen_object));
12129 39 custom_subscreen[3].objects[i].dp1 = NULL;
12130 39 custom_subscreen[3].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
12131 39 strcpy((char*)custom_subscreen[3].objects[i].dp1,(char*)tempsub[i].dp1);
12132 39 break;
12133
12134 case ssoLIFEMETER:
12135 {
12136 13 memcpy(&custom_subscreen[3].objects[i],&tempsub[i],sizeof(subscreen_object));
12137
12138
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 13 times.
13 if(get_bit(deprecated_rules, 12) != 0)
12139 custom_subscreen[3].objects[i].d3=1;
12140 else
12141 13 custom_subscreen[3].objects[i].d3=0;
12142
12143 13 break;
12144 }
12145
12146 default:
12147 195 memcpy(&custom_subscreen[3].objects[i],&tempsub[i],sizeof(subscreen_object));
12148 195 break;
12149 }
12150 247 }
12151
12152 13 custom_subscreen[3].ss_type=sstPASSIVE;
12153 13 sprintf(custom_subscreen[3].name, "Passive Subscreen (No Magic)");
12154 // memset(&custom_subscreen[3].objects[i],0,sizeof(subscreen_object));
12155 13 break;
12156 }
12157
12158 case ssdtZ3:
12159 {
12160 tempsub = z3_active_a;
12161 int32_t i;
12162
12163 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
12164 {
12165 switch(tempsub[i].type)
12166 {
12167 case ssoTEXT:
12168 case ssoTEXTBOX:
12169 case ssoCURRENTITEMTEXT:
12170 case ssoCURRENTITEMCLASSTEXT:
12171 if(custom_subscreen[0].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[0].objects[i].dp1;
12172
12173 memcpy(&custom_subscreen[0].objects[i],&tempsub[i],sizeof(subscreen_object));
12174 custom_subscreen[0].objects[i].dp1 = NULL;
12175 custom_subscreen[0].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
12176 strcpy((char*)custom_subscreen[0].objects[i].dp1,(char*)tempsub[i].dp1);
12177 break;
12178
12179 case ssoLIFEMETER:
12180 {
12181 memcpy(&custom_subscreen[0].objects[i],&tempsub[i],sizeof(subscreen_object));
12182
12183 if(get_bit(deprecated_rules, 12) != 0)
12184 custom_subscreen[0].objects[i].d3=1;
12185 else
12186 custom_subscreen[0].objects[i].d3=0;
12187
12188 break;
12189 }
12190
12191 default:
12192 memcpy(&custom_subscreen[0].objects[i],&tempsub[i],sizeof(subscreen_object));
12193 break;
12194 }
12195 }
12196
12197 custom_subscreen[0].ss_type=sstACTIVE;
12198 // memset(&custom_subscreen[0].objects[i],0,sizeof(subscreen_object));
12199 tempsub = z3_active_ab;
12200
12201 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
12202 {
12203 switch(tempsub[i].type)
12204 {
12205 case ssoTEXT:
12206 case ssoTEXTBOX:
12207 case ssoCURRENTITEMTEXT:
12208 case ssoCURRENTITEMCLASSTEXT:
12209 if(custom_subscreen[1].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[1].objects[i].dp1;
12210
12211 memcpy(&custom_subscreen[1].objects[i],&tempsub[i],sizeof(subscreen_object));
12212 custom_subscreen[1].objects[i].dp1 = NULL;
12213 custom_subscreen[1].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
12214 strcpy((char*)custom_subscreen[1].objects[i].dp1,(char*)tempsub[i].dp1);
12215 break;
12216
12217 case ssoLIFEMETER:
12218 {
12219 memcpy(&custom_subscreen[1].objects[i],&tempsub[i],sizeof(subscreen_object));
12220
12221 if(get_bit(deprecated_rules, 12) != 0)
12222 custom_subscreen[1].objects[i].d3=1;
12223 else
12224 custom_subscreen[1].objects[i].d3=0;
12225
12226 break;
12227 }
12228
12229 default:
12230 memcpy(&custom_subscreen[1].objects[i],&tempsub[i],sizeof(subscreen_object));
12231 break;
12232 }
12233 }
12234
12235 custom_subscreen[1].ss_type=sstACTIVE;
12236 // memset(&custom_subscreen[1].objects[i],0,sizeof(subscreen_object));
12237 tempsub = z3_passive_a;
12238
12239 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
12240 {
12241 switch(tempsub[i].type)
12242 {
12243 case ssoTEXT:
12244 case ssoTEXTBOX:
12245 case ssoCURRENTITEMTEXT:
12246 case ssoCURRENTITEMCLASSTEXT:
12247 if(custom_subscreen[2].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[2].objects[i].dp1;
12248
12249 memcpy(&custom_subscreen[2].objects[i],&tempsub[i],sizeof(subscreen_object));
12250 custom_subscreen[2].objects[i].dp1 = NULL;
12251 custom_subscreen[2].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
12252 strcpy((char*)custom_subscreen[2].objects[i].dp1,(char*)tempsub[i].dp1);
12253 break;
12254
12255 case ssoLIFEMETER:
12256 {
12257 memcpy(&custom_subscreen[2].objects[i],&tempsub[i],sizeof(subscreen_object));
12258
12259 if(get_bit(deprecated_rules, 12) != 0)
12260 custom_subscreen[2].objects[i].d3=1;
12261 else
12262 custom_subscreen[2].objects[i].d3=0;
12263
12264 break;
12265 }
12266
12267 default:
12268 memcpy(&custom_subscreen[2].objects[i],&tempsub[i],sizeof(subscreen_object));
12269 break;
12270 }
12271 }
12272
12273 custom_subscreen[2].ss_type=sstPASSIVE;
12274 // memset(&custom_subscreen[2].objects[i],0,sizeof(subscreen_object));
12275 tempsub = z3_passive_ab;
12276
12277 for(i=0; (i<MAXSUBSCREENITEMS&&tempsub[i].type!=ssoNULL); i++)
12278 {
12279 switch(tempsub[i].type)
12280 {
12281 case ssoTEXT:
12282 case ssoTEXTBOX:
12283 case ssoCURRENTITEMTEXT:
12284 case ssoCURRENTITEMCLASSTEXT:
12285 if(custom_subscreen[3].objects[i].dp1 != NULL) delete [](char *)custom_subscreen[3].objects[i].dp1;
12286
12287 memcpy(&custom_subscreen[3].objects[i],&tempsub[i],sizeof(subscreen_object));
12288 custom_subscreen[3].objects[i].dp1 = NULL;
12289 custom_subscreen[3].objects[i].dp1 = new char[strlen((char*)tempsub[i].dp1)+1];
12290 strcpy((char*)custom_subscreen[3].objects[i].dp1,(char*)tempsub[i].dp1);
12291 break;
12292
12293 case ssoLIFEMETER:
12294 {
12295 memcpy(&custom_subscreen[3].objects[i],&tempsub[i],sizeof(subscreen_object));
12296
12297 if(get_bit(deprecated_rules, 12) != 0)
12298 custom_subscreen[3].objects[i].d3=1;
12299 else
12300 custom_subscreen[3].objects[i].d3=0;
12301
12302 break;
12303 }
12304
12305 default:
12306 memcpy(&custom_subscreen[3].objects[i],&tempsub[i],sizeof(subscreen_object));
12307 break;
12308 }
12309 }
12310
12311 custom_subscreen[3].ss_type=sstPASSIVE;
12312 // memset(&custom_subscreen[3].objects[i],0,sizeof(subscreen_object));
12313 break;
12314 }
12315 }
12316
12317
2/2
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 52 times.
65 for(int32_t i=0; i<4; ++i)
12318 {
12319 52 purge_blank_subscreen_objects(&custom_subscreen[i]);
12320 52 }
12321
12322 13 return 0;
12323 }
12324
12325 extern script_data *ffscripts[NUMSCRIPTFFC];
12326 extern script_data *itemscripts[NUMSCRIPTITEM];
12327 extern script_data *guyscripts[NUMSCRIPTGUYS];
12328 extern script_data *wpnscripts[NUMSCRIPTWEAPONS];
12329 extern script_data *lwpnscripts[NUMSCRIPTWEAPONS];
12330 extern script_data *ewpnscripts[NUMSCRIPTWEAPONS];
12331 extern script_data *globalscripts[NUMSCRIPTGLOBAL];
12332 extern script_data *genericscripts[NUMSCRIPTSGENERIC];
12333 extern script_data *playerscripts[NUMSCRIPTPLAYER];
12334 extern script_data *screenscripts[NUMSCRIPTSCREEN];
12335 extern script_data *dmapscripts[NUMSCRIPTSDMAP];
12336 extern script_data *itemspritescripts[NUMSCRIPTSITEMSPRITE];
12337 extern script_data *comboscripts[NUMSCRIPTSCOMBODATA];
12338 //script_data *wpnscripts[NUMSCRIPTWEAPONS]; //used only for old data
12339
12340
12341
12342 63 int32_t readffscript(PACKFILE *f, zquestheader *Header, bool keepdata)
12343 {
12344 int32_t dummy;
12345 63 word s_version=0, s_cversion=0, zmeta_version=0;
12346 63 byte numscripts=0;
12347 63 numscripts=numscripts; //to avoid unused variables warnings
12348 int32_t ret;
12349
12350 //section version info
12351
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(!p_igetw(&s_version,f,true))
12352 {
12353 return qe_invalid;
12354 }
12355
12356 63 FFCore.quest_format[vFFScript] = s_version;
12357
12358
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_cversion,f,true))
12359 {
12360 return qe_invalid;
12361 }
12362
12363
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(s_version >= 18)
12364 {
12365
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_igetw(&zmeta_version,f,true))
12366 {
12367 return qe_invalid;
12368 }
12369 4 }
12370
12371 //al_trace("Scripts version %d\n", s_version);
12372 //section size
12373
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy,f,true))
12374 {
12375 return qe_invalid;
12376 }
12377
12378 //ZScriptVersion::setVersion(s_version); ~this ideally, but there's no ZC/ZQuest defines...
12379 63 setZScriptVersion(s_version); //Lumped in zelda.cpp and in zquest.cpp as zquest can't link ZScriptVersion
12380 63 temp_ffscript_version = s_version;
12381 //miscQdata *the_misc;
12382
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if ( FFCore.quest_format[vLastCompile] < 13 ) FFCore.quest_format[vLastCompile] = s_version;
12383 63 al_trace("Loaded scripts last compiled in ZScript version: %d\n", (FFCore.quest_format[vLastCompile]));
12384
12385 //finally... section data
12386
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 63 times.
32319 for(int32_t i = 0; i < ((s_version < 2) ? NUMSCRIPTFFCOLD : NUMSCRIPTFFC); i++)
12387 {
12388 32256 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &ffscripts[i], zmeta_version);
12389
12390
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(ret != 0) return qe_invalid;
12391 32256 }
12392
12393 /* HIGHLY UNORTHODOX UPDATING THING, by Deedee
12394 * This fixes changes to sprite jump values introduced in early 2.55 alphas.
12395 * Zoria didn't bump up the versions as liberally as he should have, but thankfully
12396 * there was a version bump a week before a change that broke stuff.
12397 */
12398
6/8
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4 times.
✓ Branch 7 taken 59 times.
63 if(((Header->zelda_version < 0x253)||((Header->zelda_version == 0x253)&&(Header->build<33))||((Header->zelda_version > 0x253) && s_version < 12)) && keepdata)
12399 {
12400 59 set_bit(quest_rules,qr_SPRITE_JUMP_IS_TRUNCATED,1);
12401 59 }
12402
3/4
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 59 times.
63 if(s_version < 19 && keepdata)
12403 {
12404 59 set_bit(quest_rules,qr_FLUCTUATING_ENEMY_JUMP,1);
12405 59 }
12406
12407
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version > 1)
12408 {
12409
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i = 0; i < NUMSCRIPTITEM; i++)
12410 {
12411 16128 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &itemscripts[i], zmeta_version);
12412
12413
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(ret != 0) return qe_invalid;
12414 16128 }
12415
12416
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i = 0; i < NUMSCRIPTGUYS; i++)
12417 {
12418 16128 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &guyscripts[i], zmeta_version);
12419
12420
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(ret != 0) return qe_invalid;
12421 16128 }
12422
12423
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i = 0; i < NUMSCRIPTWEAPONS; i++)
12424 {
12425 16128 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &wpnscripts[i], zmeta_version);
12426
12427
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(ret != 0) return qe_invalid;
12428 16128 }
12429
12430
12431
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i = 0; i < NUMSCRIPTSCREEN; i++)
12432 {
12433 16128 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &screenscripts[i], zmeta_version);
12434
12435
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 if(ret != 0) return qe_invalid;
12436 16128 }
12437
12438
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version > 16)
12439 {
12440
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 4 times.
36 for(int32_t i = 0; i < NUMSCRIPTGLOBAL; ++i)
12441 {
12442 32 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &globalscripts[i], zmeta_version);
12443
12444
1/2
✓ Branch 0 taken 32 times.
✗ Branch 1 not taken.
32 if(ret != 0) return qe_invalid;
12445 32 }
12446 4 }
12447
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 else if(s_version > 13)
12448 {
12449 for(int32_t i = 0; i < NUMSCRIPTGLOBAL255OLD; ++i)
12450 {
12451 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &globalscripts[i], zmeta_version);
12452
12453 if(ret != 0) return qe_invalid;
12454 }
12455
12456 if(globalscripts[GLOBAL_SCRIPT_ONSAVE] != NULL)
12457 delete globalscripts[GLOBAL_SCRIPT_ONSAVE];
12458
12459 globalscripts[GLOBAL_SCRIPT_ONSAVE] = new script_data();
12460 }
12461
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 else if(s_version > 4)
12462 {
12463
2/2
✓ Branch 0 taken 236 times.
✓ Branch 1 taken 59 times.
295 for(int32_t i = 0; i < NUMSCRIPTGLOBAL253; ++i)
12464 {
12465 236 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &globalscripts[i], zmeta_version);
12466
12467
1/2
✓ Branch 0 taken 236 times.
✗ Branch 1 not taken.
236 if(ret != 0) return qe_invalid;
12468 236 }
12469
12470
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(globalscripts[GLOBAL_SCRIPT_ONLAUNCH] != NULL)
12471
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 delete globalscripts[GLOBAL_SCRIPT_ONLAUNCH];
12472
12473
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 globalscripts[GLOBAL_SCRIPT_ONLAUNCH] = new script_data();
12474
12475
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(globalscripts[GLOBAL_SCRIPT_ONCONTGAME] != NULL)
12476
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 delete globalscripts[GLOBAL_SCRIPT_ONCONTGAME];
12477
12478
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 globalscripts[GLOBAL_SCRIPT_ONCONTGAME] = new script_data();
12479
12480
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(globalscripts[GLOBAL_SCRIPT_F6] != NULL)
12481
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 delete globalscripts[GLOBAL_SCRIPT_F6];
12482
12483
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 globalscripts[GLOBAL_SCRIPT_F6] = new script_data();
12484
12485
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(globalscripts[GLOBAL_SCRIPT_ONSAVE] != NULL)
12486
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 delete globalscripts[GLOBAL_SCRIPT_ONSAVE];
12487
12488
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 globalscripts[GLOBAL_SCRIPT_ONSAVE] = new script_data();
12489 59 }
12490 else
12491 {
12492 for(int32_t i = 0; i < NUMSCRIPTGLOBALOLD; i++)
12493 {
12494 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &globalscripts[i], zmeta_version);
12495
12496 if(ret != 0) return qe_invalid;
12497 }
12498
12499 if(globalscripts[GLOBAL_SCRIPT_ONSAVELOAD] != NULL)
12500 delete globalscripts[GLOBAL_SCRIPT_ONSAVELOAD];
12501
12502 globalscripts[GLOBAL_SCRIPT_ONSAVELOAD] = new script_data();
12503
12504 if(globalscripts[GLOBAL_SCRIPT_ONLAUNCH] != NULL)
12505 delete globalscripts[GLOBAL_SCRIPT_ONLAUNCH];
12506
12507 globalscripts[GLOBAL_SCRIPT_ONLAUNCH] = new script_data();
12508
12509 if(globalscripts[GLOBAL_SCRIPT_ONCONTGAME] != NULL)
12510 delete globalscripts[GLOBAL_SCRIPT_ONCONTGAME];
12511
12512 globalscripts[GLOBAL_SCRIPT_ONCONTGAME] = new script_data();
12513
12514 if(globalscripts[GLOBAL_SCRIPT_F6] != NULL)
12515 delete globalscripts[GLOBAL_SCRIPT_F6];
12516
12517 globalscripts[GLOBAL_SCRIPT_F6] = new script_data();
12518
12519 if(globalscripts[GLOBAL_SCRIPT_ONSAVE] != NULL)
12520 delete globalscripts[GLOBAL_SCRIPT_ONSAVE];
12521
12522 globalscripts[GLOBAL_SCRIPT_ONSAVE] = new script_data();
12523 }
12524
12525
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version > 10) //expanded the number of Player scripts to 5.
12526 {
12527
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 4 times.
24 for(int32_t i = 0; i < NUMSCRIPTPLAYER; i++)
12528 {
12529 20 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &playerscripts[i], zmeta_version);
12530
12531
1/2
✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
20 if(ret != 0) return qe_invalid;
12532 20 }
12533 4 }
12534 else
12535 {
12536
2/2
✓ Branch 0 taken 177 times.
✓ Branch 1 taken 59 times.
236 for(int32_t i = 0; i < NUMSCRIPTHEROOLD; i++)
12537 {
12538 177 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &playerscripts[i], zmeta_version);
12539
12540
1/2
✓ Branch 0 taken 177 times.
✗ Branch 1 not taken.
177 if(ret != 0) return qe_invalid;
12541 177 }
12542
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if(playerscripts[3] != NULL)
12543
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 delete playerscripts[3];
12544
12545
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 playerscripts[3] = new script_data();
12546
12547
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if(playerscripts[4] != NULL)
12548
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 delete playerscripts[4];
12549
12550
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 playerscripts[4] = new script_data();
12551 }
12552
3/4
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
63 if(s_version > 8 && s_version < 10)
12553 {
12554
12555 for(int32_t i = 0; i < NUMSCRIPTWEAPONS; i++)
12556 {
12557 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &ewpnscripts[i], zmeta_version);
12558
12559 if(ret != 0) return qe_invalid;
12560 }
12561 for(int32_t i = 0; i < NUMSCRIPTSDMAP; i++)
12562 {
12563 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &dmapscripts[i], zmeta_version);
12564
12565 if(ret != 0) return qe_invalid;
12566 }
12567
12568 }
12569
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(s_version >= 10)
12570 {
12571
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 4 times.
1028 for(int32_t i = 0; i < NUMSCRIPTWEAPONS; i++)
12572 {
12573 1024 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &lwpnscripts[i], zmeta_version);
12574
12575
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(ret != 0) return qe_invalid;
12576 1024 }
12577
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 4 times.
1028 for(int32_t i = 0; i < NUMSCRIPTWEAPONS; i++)
12578 {
12579 1024 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &ewpnscripts[i], zmeta_version);
12580
12581
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(ret != 0) return qe_invalid;
12582 1024 }
12583
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 4 times.
1028 for(int32_t i = 0; i < NUMSCRIPTSDMAP; i++)
12584 {
12585 1024 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &dmapscripts[i], zmeta_version);
12586
12587
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(ret != 0) return qe_invalid;
12588 1024 }
12589
12590 4 }
12591
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(s_version >=12)
12592 {
12593
2/2
✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 4 times.
1028 for(int32_t i = 0; i < NUMSCRIPTSITEMSPRITE; i++)
12594 {
12595 1024 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &itemspritescripts[i], zmeta_version);
12596
12597
1/2
✓ Branch 0 taken 1024 times.
✗ Branch 1 not taken.
1024 if(ret != 0) return qe_invalid;
12598 1024 }
12599 4 }
12600
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(s_version >=15)
12601 {
12602
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 4 times.
2052 for(int32_t i = 0; i < NUMSCRIPTSCOMBODATA; i++)
12603 {
12604 2048 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &comboscripts[i], zmeta_version);
12605
12606
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(ret != 0) return qe_invalid;
12607 2048 }
12608 4 }
12609
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(s_version >19)
12610 {
12611 4 word numgenscripts = NUMSCRIPTSGENERIC;
12612
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_igetw(&numgenscripts,f,true))
12613 {
12614 return qe_invalid;
12615 }
12616
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 4 times.
2052 for(int32_t i = 0; i < numgenscripts; i++)
12617 {
12618 2048 ret = read_one_ffscript(f, Header, keepdata, i, s_version, s_cversion, &genericscripts[i], zmeta_version);
12619
12620
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(ret != 0) return qe_invalid;
12621 2048 }
12622 4 }
12623
12624 /*
12625 else //Is this trip really necessary?
12626 {
12627 for(int32_t i = 0; i < NUMSCRIPTWEAPONS; i++)
12628 {
12629
12630 ewpnscripts[i] = NULL;
12631 }
12632 for(int32_t i = 0; i < NUMSCRIPTSDMAP; i++)
12633 {
12634 dmapscripts[i] = NULL;
12635 }
12636 }
12637 */
12638
12639 63 }
12640
12641
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version > 2)
12642 {
12643 int32_t bufsize;
12644 63 p_igetl(&bufsize, f, true);
12645 63 char * buf = new char[bufsize+1];
12646 63 pfread(buf, bufsize, f, true);
12647 63 buf[bufsize]=0;
12648
12649
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata)
12650 63 zScript = string(buf);
12651
12652
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 delete[] buf;
12653 word numffcbindings;
12654 63 p_igetw(&numffcbindings, f, true);
12655
12656
2/2
✓ Branch 0 taken 569 times.
✓ Branch 1 taken 63 times.
632 for(int32_t i=0; i<numffcbindings; i++)
12657 {
12658 word id;
12659 569 p_igetw(&id, f, true);
12660 569 p_igetl(&bufsize, f, true);
12661 569 buf = new char[bufsize+1];
12662 569 pfread(buf, bufsize, f, true);
12663 569 buf[bufsize]=0;
12664
12665 //fix for buggy older saved quests -DD
12666
2/4
✓ Branch 0 taken 569 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 569 times.
569 if(keepdata && id < NUMSCRIPTFFC-1)
12667 569 ffcmap[id].scriptname = buf;
12668
12669
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 569 times.
569 delete[] buf;
12670 569 }
12671
12672 word numglobalbindings;
12673 63 p_igetw(&numglobalbindings, f, true);
12674
12675
2/2
✓ Branch 0 taken 307 times.
✓ Branch 1 taken 63 times.
370 for(int32_t i=0; i<numglobalbindings; i++)
12676 {
12677 word id;
12678 307 p_igetw(&id, f, true);
12679 307 p_igetl(&bufsize, f, true);
12680 307 buf = new char[bufsize+1];
12681 307 pfread(buf, bufsize, f, true);
12682 307 buf[bufsize]=0;
12683
12684 // id in principle should be valid, since slot assignment cannot assign a global script to a bogus slot.
12685 // However, because of a corruption bug, some 2.50.x quests contain bogus entries in the global bindings table.
12686 // Ignore these. -DD
12687
4/6
✓ Branch 0 taken 307 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 307 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 133 times.
✓ Branch 5 taken 174 times.
307 if(keepdata && id >= 0 && id < NUMSCRIPTGLOBAL)
12688 {
12689 //Disable old '~Continue's, they'd wreak havoc. Bit messy, apologies ~Joe
12690
1/2
✓ Branch 0 taken 174 times.
✗ Branch 1 not taken.
174 if(strcmp(buf,"~Continue") == 0)
12691 {
12692 globalmap[id].scriptname = "";
12693
12694 if(globalscripts[GLOBAL_SCRIPT_ONSAVELOAD] != NULL)
12695 globalscripts[GLOBAL_SCRIPT_ONSAVELOAD]->disable();
12696 }
12697 else
12698 {
12699 174 globalmap[id].scriptname = buf;
12700 }
12701 174 }
12702
12703
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 307 times.
307 delete[] buf;
12704 307 }
12705
12706
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version > 3)
12707 {
12708 word numitembindings;
12709 63 p_igetw(&numitembindings, f, true);
12710
12711
2/2
✓ Branch 0 taken 46 times.
✓ Branch 1 taken 63 times.
109 for(int32_t i=0; i<numitembindings; i++)
12712 {
12713 word id;
12714 46 p_igetw(&id, f, true);
12715 46 p_igetl(&bufsize, f, true);
12716 46 buf = new char[bufsize+1];
12717 46 pfread(buf, bufsize, f, true);
12718 46 buf[bufsize]=0;
12719
12720 //fix this too
12721
2/4
✓ Branch 0 taken 46 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 46 times.
46 if(keepdata && id <NUMSCRIPTITEM-1)
12722 46 itemmap[id].scriptname = buf;
12723
12724
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 46 times.
46 delete[] buf;
12725 46 }
12726 63 }
12727 //(v9+)
12728
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(s_version > 8)
12729 {
12730 //npc scripts
12731 word numnpcbindings;
12732 4 p_igetw(&numnpcbindings, f, true);
12733
12734
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 4 times.
8 for(int32_t i=0; i<numnpcbindings; i++)
12735 {
12736 word id;
12737 4 p_igetw(&id, f, true);
12738 4 p_igetl(&bufsize, f, true);
12739 4 buf = new char[bufsize+1];
12740 4 pfread(buf, bufsize, f, true);
12741 4 buf[bufsize]=0;
12742
12743 //fix this too
12744
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
4 if(keepdata && id <NUMSCRIPTGUYS-1)
12745 4 npcmap[id].scriptname = buf;
12746
12747
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 delete[] buf;
12748 4 }
12749 //lweapon
12750 word numlwpnbindings;
12751 4 p_igetw(&numlwpnbindings, f, true);
12752
12753
2/2
✓ Branch 0 taken 33 times.
✓ Branch 1 taken 4 times.
37 for(int32_t i=0; i<numlwpnbindings; i++)
12754 {
12755 word id;
12756 33 p_igetw(&id, f, true);
12757 33 p_igetl(&bufsize, f, true);
12758 33 buf = new char[bufsize+1];
12759 33 pfread(buf, bufsize, f, true);
12760 33 buf[bufsize]=0;
12761
12762 //fix this too
12763
2/4
✓ Branch 0 taken 33 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 33 times.
33 if(keepdata && id <NUMSCRIPTWEAPONS-1)
12764 33 lwpnmap[id].scriptname = buf;
12765
12766
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 33 times.
33 delete[] buf;
12767 33 }
12768 //eweapon
12769 word numewpnbindings;
12770 4 p_igetw(&numewpnbindings, f, true);
12771
12772
2/2
✓ Branch 0 taken 55 times.
✓ Branch 1 taken 4 times.
59 for(int32_t i=0; i<numewpnbindings; i++)
12773 {
12774 word id;
12775 55 p_igetw(&id, f, true);
12776 55 p_igetl(&bufsize, f, true);
12777 55 buf = new char[bufsize+1];
12778 55 pfread(buf, bufsize, f, true);
12779 55 buf[bufsize]=0;
12780
12781 //fix this too
12782
2/4
✓ Branch 0 taken 55 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 55 times.
55 if(keepdata && id <NUMSCRIPTWEAPONS-1)
12783 55 ewpnmap[id].scriptname = buf;
12784
12785
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 55 times.
55 delete[] buf;
12786 55 }
12787 //hero
12788 word numherobindings;
12789 4 p_igetw(&numherobindings, f, true);
12790
12791
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 for(int32_t i=0; i<numherobindings; i++)
12792 {
12793 word id;
12794 p_igetw(&id, f, true);
12795 p_igetl(&bufsize, f, true);
12796 buf = new char[bufsize+1];
12797 pfread(buf, bufsize, f, true);
12798 buf[bufsize]=0;
12799
12800 //fix this too
12801 if(keepdata && id <NUMSCRIPTPLAYER-1)
12802 playermap[id].scriptname = buf;
12803
12804 delete[] buf;
12805 }
12806 //dmaps
12807 word numdmapbindings;
12808 4 p_igetw(&numdmapbindings, f, true);
12809
12810
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 4 times.
13 for(int32_t i=0; i<numdmapbindings; i++)
12811 {
12812 word id;
12813 9 p_igetw(&id, f, true);
12814 9 p_igetl(&bufsize, f, true);
12815 9 buf = new char[bufsize+1];
12816 9 pfread(buf, bufsize, f, true);
12817 9 buf[bufsize]=0;
12818
12819 //fix this too
12820
2/4
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 9 times.
9 if(keepdata && id <NUMSCRIPTSDMAP-1)
12821 9 dmapmap[id].scriptname = buf;
12822
12823
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 delete[] buf;
12824 9 }
12825 //screen
12826 word numscreenbindings;
12827 4 p_igetw(&numscreenbindings, f, true);
12828
12829
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
6 for(int32_t i=0; i<numscreenbindings; i++)
12830 {
12831 word id;
12832 2 p_igetw(&id, f, true);
12833 2 p_igetl(&bufsize, f, true);
12834 2 buf = new char[bufsize+1];
12835 2 pfread(buf, bufsize, f, true);
12836 2 buf[bufsize]=0;
12837
12838 //fix this too
12839
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
2 if(keepdata && id <NUMSCRIPTSDMAP-1)
12840 2 screenmap[id].scriptname = buf;
12841
12842
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
2 delete[] buf;
12843 2 }
12844 4 }
12845
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(s_version > 11)
12846 {
12847 word numspritebindings;
12848 4 p_igetw(&numspritebindings, f, true);
12849
12850
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 4 times.
13 for(int32_t i=0; i<numspritebindings; i++)
12851 {
12852 word id;
12853 9 p_igetw(&id, f, true);
12854 9 p_igetl(&bufsize, f, true);
12855 9 buf = new char[bufsize+1];
12856 9 pfread(buf, bufsize, f, true);
12857 9 buf[bufsize]=0;
12858
12859 //fix this too
12860
2/4
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 9 times.
9 if(keepdata && id <NUMSCRIPTSDMAP-1)
12861 9 itemspritemap[id].scriptname = buf;
12862
12863
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 delete[] buf;
12864 9 }
12865 4 }
12866
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(s_version >= 15)
12867 {
12868 word numcombobindings;
12869 4 p_igetw(&numcombobindings, f, true);
12870
12871
2/2
✓ Branch 0 taken 24 times.
✓ Branch 1 taken 4 times.
28 for(int32_t i=0; i<numcombobindings; i++)
12872 {
12873 word id;
12874 24 p_igetw(&id, f, true);
12875 24 p_igetl(&bufsize, f, true);
12876 24 buf = new char[bufsize+1];
12877 24 pfread(buf, bufsize, f, true);
12878 24 buf[bufsize]=0;
12879
12880 //fix this too
12881
2/4
✓ Branch 0 taken 24 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 24 times.
24 if(keepdata && id <NUMSCRIPTSCOMBODATA-1)
12882 24 comboscriptmap[id].scriptname = buf;
12883
12884
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 24 times.
24 delete[] buf;
12885 24 }
12886 4 }
12887
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(s_version > 19)
12888 {
12889 word numgenericbindings;
12890 4 p_igetw(&numgenericbindings, f, true);
12891
12892
2/2
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 4 times.
17 for(int32_t i=0; i<numgenericbindings; i++)
12893 {
12894 word id;
12895 13 p_igetw(&id, f, true);
12896 13 p_igetl(&bufsize, f, true);
12897 13 buf = new char[bufsize+1];
12898 13 pfread(buf, bufsize, f, true);
12899 13 buf[bufsize]=0;
12900
12901 //fix this too
12902
2/4
✓ Branch 0 taken 13 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 13 times.
13 if(keepdata && id <NUMSCRIPTSGENERIC-1)
12903 13 genericmap[id].scriptname = buf;
12904
12905
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 13 times.
13 delete[] buf;
12906 13 }
12907 4 }
12908 63 }
12909
12910 63 return 0;
12911 63 }
12912
12913 63 void reset_scripts()
12914 {
12915 //OK, who spaced this? ;)
12916
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 63 times.
32319 for(int32_t i=0; i<NUMSCRIPTFFC; i++)
12917 {
12918
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 32256 times.
32256 if(ffscripts[i]!=NULL) delete ffscripts[i];
12919 32256 }
12920
12921
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTITEM; i++)
12922 {
12923
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 16128 times.
16128 if(itemscripts[i]!=NULL) delete itemscripts[i];
12924 16128 }
12925
12926
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTGUYS; i++)
12927 {
12928
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 16128 times.
16128 if(guyscripts[i]!=NULL) delete guyscripts[i];
12929 16128 }
12930
12931
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTWEAPONS; i++)
12932 {
12933
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 16128 times.
16128 if(wpnscripts[i]!=NULL) delete wpnscripts[i];
12934 16128 }
12935
12936
12937
12938
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTSCREEN; i++)
12939 {
12940
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 16128 times.
16128 if(screenscripts[i]!=NULL) delete screenscripts[i];
12941 16128 }
12942
12943
2/2
✓ Branch 0 taken 504 times.
✓ Branch 1 taken 63 times.
567 for(int32_t i=0; i<NUMSCRIPTGLOBAL; i++)
12944 {
12945
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 504 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 504 times.
504 if(globalscripts[i]!=NULL) delete globalscripts[i];
12946 504 }
12947
12948
2/2
✓ Branch 0 taken 315 times.
✓ Branch 1 taken 63 times.
378 for(int32_t i=0; i<NUMSCRIPTPLAYER; i++)
12949 {
12950
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 315 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 315 times.
315 if(playerscripts[i]!=NULL) delete playerscripts[i];
12951 315 }
12952
12953
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTWEAPONS; i++)
12954 {
12955
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 16128 times.
16128 if(lwpnscripts[i]!=NULL) delete lwpnscripts[i];
12956 16128 }
12957
12958
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTWEAPONS; i++)
12959 {
12960
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 16128 times.
16128 if(ewpnscripts[i]!=NULL) delete ewpnscripts[i];
12961 16128 }
12962
12963
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTSDMAP; i++)
12964 {
12965
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 16128 times.
16128 if(dmapscripts[i]!=NULL) delete dmapscripts[i];
12966 16128 }
12967
12968
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTSITEMSPRITE; i++)
12969 {
12970
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 16128 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 16128 times.
16128 if(itemspritescripts[i]!=NULL) delete itemspritescripts[i];
12971 16128 }
12972
12973
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 63 times.
32319 for(int32_t i=0; i<NUMSCRIPTSCOMBODATA; i++)
12974 {
12975
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 32256 times.
32256 if(comboscripts[i]!=NULL) delete comboscripts[i];
12976 32256 }
12977
12978
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 63 times.
32319 for(int32_t i=0; i<NUMSCRIPTSGENERIC; i++)
12979 {
12980
3/4
✓ Branch 0 taken 6144 times.
✓ Branch 1 taken 26112 times.
✓ Branch 2 taken 26112 times.
✗ Branch 3 not taken.
32256 if(genericscripts[i]!=NULL) delete genericscripts[i];
12981
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 genericscripts[i] = new script_data();
12982 32256 }
12983
12984
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 63 times.
32319 for(int32_t i=0; i<NUMSCRIPTFFC; i++)
12985 {
12986
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 ffscripts[i] = new script_data();
12987 32256 }
12988
12989
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTITEM; i++)
12990 {
12991
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 itemscripts[i] = new script_data();
12992 16128 }
12993
12994
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTGUYS; i++)
12995 {
12996
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 guyscripts[i] = new script_data();
12997 16128 }
12998
12999
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTWEAPONS; i++)
13000 {
13001
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 wpnscripts[i] = new script_data();
13002 16128 }
13003
13004
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTSCREEN; i++)
13005 {
13006
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 screenscripts[i] = new script_data();
13007 16128 }
13008
13009
2/2
✓ Branch 0 taken 504 times.
✓ Branch 1 taken 63 times.
567 for(int32_t i=0; i<NUMSCRIPTGLOBAL; i++)
13010 {
13011
1/2
✓ Branch 0 taken 504 times.
✗ Branch 1 not taken.
504 globalscripts[i] = new script_data();
13012 504 }
13013
13014
2/2
✓ Branch 0 taken 315 times.
✓ Branch 1 taken 63 times.
378 for(int32_t i=0; i<NUMSCRIPTPLAYER; i++)
13015 {
13016
1/2
✓ Branch 0 taken 315 times.
✗ Branch 1 not taken.
315 playerscripts[i] = new script_data();
13017 315 }
13018
13019
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTWEAPONS; i++)
13020 {
13021
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 lwpnscripts[i] = new script_data();
13022 16128 }
13023
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTWEAPONS; i++)
13024 {
13025
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 ewpnscripts[i] = new script_data();
13026 16128 }
13027
13028
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTSDMAP; i++)
13029 {
13030
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 dmapscripts[i] = new script_data();
13031 16128 }
13032
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<NUMSCRIPTSITEMSPRITE; i++)
13033 {
13034
1/2
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
16128 itemspritescripts[i] = new script_data();
13035 16128 }
13036
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 63 times.
32319 for(int32_t i=0; i<NUMSCRIPTSCOMBODATA; i++)
13037 {
13038
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 comboscripts[i] = new script_data();
13039 32256 }
13040 63 }
13041
13042 extern script_command command_list[];
13043 105425 int32_t read_one_ffscript(PACKFILE *f, zquestheader *, bool keepdata, int32_t , word s_version, word , script_data **script, word zmeta_version)
13044 {
13045 //Please also update loadquest() when modifying this method -DD
13046 105425 char b33[34] = {0};
13047 105425 b33[33] = 0;
13048 105425 ffscript temp_script;
13049 105425 int32_t num_commands=1000;
13050
13051
1/2
✓ Branch 0 taken 105425 times.
✗ Branch 1 not taken.
105425 if(s_version>=2)
13052 {
13053
2/4
✓ Branch 0 taken 105425 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 105425 times.
✗ Branch 3 not taken.
105425 if(!p_igetl(&num_commands,f,true))
13054 {
13055 return qe_invalid;
13056 }
13057 105425 }
13058
13059
1/2
✓ Branch 0 taken 105425 times.
✗ Branch 1 not taken.
105425 if(keepdata)
13060 {
13061
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105425 times.
105425 if((*script) != NULL) //Surely we want to do this regardless of keepdata? //No, we don't -V
13062
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105425 times.
105425 delete (*script);
13063
2/4
✓ Branch 0 taken 105425 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 105425 times.
✗ Branch 3 not taken.
105425 (*script) = new script_data(num_commands);
13064 105425 }
13065
2/2
✓ Branch 0 taken 14388 times.
✓ Branch 1 taken 91037 times.
105425 if(s_version >= 16)
13066 {
13067
1/2
✓ Branch 0 taken 14388 times.
✗ Branch 1 not taken.
14388 zasm_meta temp_meta;
13068
13069
2/4
✓ Branch 0 taken 14388 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 14388 times.
✗ Branch 3 not taken.
14388 if(!p_igetw(&(temp_meta.zasm_v),f,true))
13070 {
13071 return qe_invalid;
13072 }
13073
13074
2/4
✓ Branch 0 taken 14388 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 14388 times.
✗ Branch 3 not taken.
14388 if(!p_igetw(&(temp_meta.meta_v),f,true))
13075 {
13076 return qe_invalid;
13077 }
13078
13079
2/4
✓ Branch 0 taken 14388 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 14388 times.
✗ Branch 3 not taken.
14388 if(!p_igetw(&(temp_meta.ffscript_v),f,true))
13080 {
13081 return qe_invalid;
13082 }
13083
13084
2/4
✓ Branch 0 taken 14388 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 14388 times.
✗ Branch 3 not taken.
14388 if(!p_getc(&(temp_meta.script_type),f,true))
13085 {
13086 return qe_invalid;
13087 }
13088
13089
2/2
✓ Branch 0 taken 115104 times.
✓ Branch 1 taken 14388 times.
129492 for(int32_t q = 0; q < 8; ++q)
13090 {
13091
2/2
✓ Branch 0 taken 57552 times.
✓ Branch 1 taken 57552 times.
115104 if(zmeta_version < 3)
13092 {
13093
2/2
✓ Branch 0 taken 57552 times.
✓ Branch 1 taken 1899216 times.
1956768 for(int32_t c = 0; c < 33; ++c)
13094 {
13095
2/4
✓ Branch 0 taken 1899216 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1899216 times.
✗ Branch 3 not taken.
1899216 if(!p_getc(&(b33[c]),f,true))
13096 {
13097 return qe_invalid;
13098 }
13099 1899216 }
13100
1/2
✓ Branch 0 taken 57552 times.
✗ Branch 1 not taken.
57552 temp_meta.run_idens[q].assign(b33);
13101 57552 }
13102 else
13103 {
13104
2/4
✓ Branch 0 taken 57552 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 57552 times.
✗ Branch 3 not taken.
57552 if(!p_getcstr(&temp_meta.run_idens[q],f,true))
13105 {
13106 return qe_invalid;
13107 }
13108 }
13109 115104 }
13110
13111
2/2
✓ Branch 0 taken 14388 times.
✓ Branch 1 taken 115104 times.
129492 for(int32_t q = 0; q < 8; ++q)
13112 {
13113
2/4
✓ Branch 0 taken 115104 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 115104 times.
✗ Branch 3 not taken.
115104 if(!p_getc(&(temp_meta.run_types[q]),f,true))
13114 {
13115 return qe_invalid;
13116 }
13117 115104 }
13118
13119
2/4
✓ Branch 0 taken 14388 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 14388 times.
✗ Branch 3 not taken.
14388 if(!p_getc(&(temp_meta.flags),f,true))
13120 {
13121 return qe_invalid;
13122 }
13123
13124
2/4
✓ Branch 0 taken 14388 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 14388 times.
✗ Branch 3 not taken.
14388 if(!p_igetw(&(temp_meta.compiler_v1),f,true))
13125 {
13126 return qe_invalid;
13127 }
13128
13129
2/4
✓ Branch 0 taken 14388 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 14388 times.
✗ Branch 3 not taken.
14388 if(!p_igetw(&(temp_meta.compiler_v2),f,true))
13130 {
13131 return qe_invalid;
13132 }
13133
13134
2/4
✓ Branch 0 taken 14388 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 14388 times.
✗ Branch 3 not taken.
14388 if(!p_igetw(&(temp_meta.compiler_v3),f,true))
13135 {
13136 return qe_invalid;
13137 }
13138
13139
2/4
✓ Branch 0 taken 14388 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 14388 times.
✗ Branch 3 not taken.
14388 if(!p_igetw(&(temp_meta.compiler_v4),f,true))
13140 {
13141 return qe_invalid;
13142 }
13143
13144
2/2
✓ Branch 0 taken 7194 times.
✓ Branch 1 taken 7194 times.
14388 if(zmeta_version == 2)
13145 {
13146
2/2
✓ Branch 0 taken 7194 times.
✓ Branch 1 taken 237402 times.
244596 for(int32_t c = 0; c < 33; ++c)
13147 {
13148
2/4
✓ Branch 0 taken 237402 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 237402 times.
✗ Branch 3 not taken.
237402 if(!p_getc(&b33[c],f,true))
13149 {
13150 return qe_invalid;
13151 }
13152 237402 }
13153
1/2
✓ Branch 0 taken 7194 times.
✗ Branch 1 not taken.
7194 temp_meta.script_name.assign(b33);
13154
13155
2/2
✓ Branch 0 taken 7194 times.
✓ Branch 1 taken 237402 times.
244596 for(int32_t c = 0; c < 33; ++c)
13156 {
13157
2/4
✓ Branch 0 taken 237402 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 237402 times.
✗ Branch 3 not taken.
237402 if(!p_getc(&b33[c],f,true))
13158 {
13159 return qe_invalid;
13160 }
13161 237402 }
13162
1/2
✓ Branch 0 taken 7194 times.
✗ Branch 1 not taken.
7194 temp_meta.author.assign(b33);
13163 7194 }
13164
1/2
✓ Branch 0 taken 7194 times.
✗ Branch 1 not taken.
7194 else if(zmeta_version > 2)
13165 {
13166
2/4
✓ Branch 0 taken 7194 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 7194 times.
✗ Branch 3 not taken.
7194 if(!p_getcstr(&temp_meta.script_name,f,true))
13167 return qe_invalid;
13168
2/4
✓ Branch 0 taken 7194 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 7194 times.
✗ Branch 3 not taken.
7194 if(!p_getcstr(&temp_meta.author,f,true))
13169 return qe_invalid;
13170 7194 auto num_meta_attrib = (zmeta_version < 5 ? 4 : 10);
13171
2/2
✓ Branch 0 taken 71940 times.
✓ Branch 1 taken 7194 times.
79134 for(auto q = 0; q < num_meta_attrib; ++q)
13172 {
13173
2/4
✓ Branch 0 taken 71940 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 71940 times.
✗ Branch 3 not taken.
71940 if(!p_getcstr(&temp_meta.attributes[q],f,true))
13174 return qe_invalid;
13175
2/4
✓ Branch 0 taken 71940 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 71940 times.
✗ Branch 3 not taken.
71940 if(!p_getwstr(&temp_meta.attributes_help[q],f,true))
13176 return qe_invalid;
13177 71940 }
13178
2/2
✓ Branch 0 taken 57552 times.
✓ Branch 1 taken 7194 times.
64746 for(auto q = 0; q < 8; ++q)
13179 {
13180
2/4
✓ Branch 0 taken 57552 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 57552 times.
✗ Branch 3 not taken.
57552 if(!p_getcstr(&temp_meta.attribytes[q],f,true))
13181 return qe_invalid;
13182
2/4
✓ Branch 0 taken 57552 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 57552 times.
✗ Branch 3 not taken.
57552 if(!p_getwstr(&temp_meta.attribytes_help[q],f,true))
13183 return qe_invalid;
13184 57552 }
13185
2/2
✓ Branch 0 taken 57552 times.
✓ Branch 1 taken 7194 times.
64746 for(auto q = 0; q < 8; ++q)
13186 {
13187
2/4
✓ Branch 0 taken 57552 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 57552 times.
✗ Branch 3 not taken.
57552 if(!p_getcstr(&temp_meta.attrishorts[q],f,true))
13188 return qe_invalid;
13189
2/4
✓ Branch 0 taken 57552 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 57552 times.
✗ Branch 3 not taken.
57552 if(!p_getwstr(&temp_meta.attrishorts_help[q],f,true))
13190 return qe_invalid;
13191 57552 }
13192
2/2
✓ Branch 0 taken 115104 times.
✓ Branch 1 taken 7194 times.
122298 for(auto q = 0; q < 16; ++q)
13193 {
13194
2/4
✓ Branch 0 taken 115104 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 115104 times.
✗ Branch 3 not taken.
115104 if(!p_getcstr(&temp_meta.usrflags[q],f,true))
13195 return qe_invalid;
13196
2/4
✓ Branch 0 taken 115104 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 115104 times.
✗ Branch 3 not taken.
115104 if(!p_getwstr(&temp_meta.usrflags_help[q],f,true))
13197 return qe_invalid;
13198 115104 }
13199 7194 }
13200
2/2
✓ Branch 0 taken 7194 times.
✓ Branch 1 taken 7194 times.
14388 if(zmeta_version > 3)
13201 {
13202
2/2
✓ Branch 0 taken 57552 times.
✓ Branch 1 taken 7194 times.
64746 for(auto q = 0; q < 8; ++q)
13203 {
13204
2/4
✓ Branch 0 taken 57552 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 57552 times.
✗ Branch 3 not taken.
57552 if(!p_getcstr(&temp_meta.initd[q],f,true))
13205 return qe_invalid;
13206
2/4
✓ Branch 0 taken 57552 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 57552 times.
✗ Branch 3 not taken.
57552 if(!p_getwstr(&temp_meta.initd_help[q],f,true))
13207 return qe_invalid;
13208 57552 }
13209
2/2
✓ Branch 0 taken 57552 times.
✓ Branch 1 taken 7194 times.
64746 for(auto q = 0; q < 8; ++q)
13210 {
13211
2/4
✓ Branch 0 taken 57552 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 57552 times.
✗ Branch 3 not taken.
57552 if(!p_getc(&temp_meta.initd_type[q],f,true))
13212 return qe_invalid;
13213 57552 }
13214 7194 }
13215 else
13216 {
13217
2/2
✓ Branch 0 taken 57552 times.
✓ Branch 1 taken 7194 times.
64746 for(auto q = 0; q < 8; ++q)
13218 {
13219
1/2
✓ Branch 0 taken 57552 times.
✗ Branch 1 not taken.
57552 temp_meta.initd[q] = temp_meta.run_idens[q];
13220 57552 }
13221 }
13222
13223
1/2
✓ Branch 0 taken 14388 times.
✗ Branch 1 not taken.
14388 if(keepdata)
13224
1/2
✓ Branch 0 taken 14388 times.
✗ Branch 1 not taken.
14388 (*script)->meta = temp_meta;
13225
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 14388 times.
14388 }
13226
13227
1/2
✓ Branch 0 taken 105425 times.
✗ Branch 1 not taken.
105425 temp_script.clear();
13228
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 5151880 times.
5151880 for(int32_t j=0; j<num_commands; j++)
13229 {
13230
2/4
✓ Branch 0 taken 5151880 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5151880 times.
✗ Branch 3 not taken.
5151880 if(!p_igetw(&(temp_script.command),f,true))
13231 {
13232 return qe_invalid;
13233 }
13234
13235
2/2
✓ Branch 0 taken 5046455 times.
✓ Branch 1 taken 105425 times.
5151880 if(temp_script.command == 0xFFFF)
13236 {
13237
1/2
✓ Branch 0 taken 105425 times.
✗ Branch 1 not taken.
105425 if(keepdata)
13238
1/2
✓ Branch 0 taken 105425 times.
✗ Branch 1 not taken.
105425 (*script)->zasm[j].clear();
13239 105425 break;
13240 }
13241 else
13242 {
13243
2/4
✓ Branch 0 taken 5046455 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5046455 times.
✗ Branch 3 not taken.
5046455 if(!p_igetl(&(temp_script.arg1),f,keepdata))
13244 {
13245 return qe_invalid;
13246 }
13247
13248
2/4
✓ Branch 0 taken 5046455 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5046455 times.
✗ Branch 3 not taken.
5046455 if(!p_igetl(&(temp_script.arg2),f,keepdata))
13249 {
13250 return qe_invalid;
13251 }
13252
13253
2/2
✓ Branch 0 taken 1249 times.
✓ Branch 1 taken 5045206 times.
5046455 if(s_version >= 21)
13254 {
13255 1249 uint32_t sz = 0;
13256
2/4
✓ Branch 0 taken 1249 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1249 times.
✗ Branch 3 not taken.
1249 if(!p_igetl(&sz,f,keepdata))
13257 {
13258 return qe_invalid;
13259 }
13260
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 1244 times.
1249 if(sz) //string found
13261 {
13262
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
5 temp_script.strptr = new std::string();
13263 char dummy;
13264
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 5 times.
64 for(size_t q = 0; q < sz; ++q)
13265 {
13266
2/4
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✗ Branch 3 not taken.
59 if(!p_getc(&dummy,f,keepdata))
13267 {
13268 return qe_invalid;
13269 }
13270
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 temp_script.strptr->push_back(dummy);
13271 59 }
13272 5 }
13273
2/4
✓ Branch 0 taken 1249 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1249 times.
✗ Branch 3 not taken.
1249 if(!p_igetl(&sz,f,keepdata))
13274 {
13275 return qe_invalid;
13276 }
13277
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1249 times.
1249 if(sz) //vector found
13278 {
13279 temp_script.vecptr = new std::vector<int32_t>();
13280 int32_t dummy;
13281 for(size_t q = 0; q < sz; ++q)
13282 {
13283 if(!p_igetl(&dummy,f,keepdata))
13284 {
13285 return qe_invalid;
13286 }
13287 temp_script.vecptr->push_back(dummy);
13288 }
13289 }
13290 1249 }
13291
13292
1/2
✓ Branch 0 taken 5046455 times.
✗ Branch 1 not taken.
5046455 if(keepdata)
13293 {
13294
1/2
✓ Branch 0 taken 5046455 times.
✗ Branch 1 not taken.
5046455 temp_script.give((*script)->zasm[j]);
13295 5046455 }
13296 }
13297
1/2
✓ Branch 0 taken 5046455 times.
✗ Branch 1 not taken.
5046455 temp_script.clear();
13298 5046455 }
13299
13300 105425 return 0;
13301 105425 }
13302
13303 extern SAMPLE customsfxdata[WAV_COUNT];
13304 extern uint8_t customsfxflag[WAV_COUNT>>3];
13305 extern int32_t sfxdat;
13306 extern DATAFILE *sfxdata;
13307 const char *old_sfx_string[Z35] =
13308 {
13309 "Arrow", "Sword beam", "Bomb blast", "Boomerang", "Subscreen cursor",
13310 "Shield is hit", "Item chime", "Roar (Dodongo, Gohma)", "Shutter", "Enemy dies",
13311 "Enemy is hit", "Low hearts warning", "Fire", "Ganon's fanfare", "Boss is hit", "Hammer",
13312 "Hookshot", "Message", "Player is hit", "Item fanfare", "Bomb placed", "Item pickup",
13313 "Refill", "Roar (Aquamentus, Gleeok, Ganon)", "Item pickup 2", "Ocean ambience",
13314 "Secret chime", "Player dies", "Stairs", "Sword", "Roar (Manhandla, Digdogger, Patra)",
13315 "Wand magic", "Whistle", "Zelda's fanfare", "Charging weapon", "Charging weapon 2",
13316 "Din's Fire", "Enemy falls from ceiling", "Farore's Wind", "Fireball", "Tall Grass slashed",
13317 "Pound pounded", "Hover Boots", "Ice magic", "Jump", "Lens of Truth off", "Lens of Truth on",
13318 "Nayru's Love shield", "Nayru's Love shield 2", "Push block", "Rock", "Spell rocket down",
13319 "Spell rocket up", "Sword spin attack", "Splash", "Summon magic", "Sword tapping",
13320 "Sword tapping (secret)", "Whistle whirlwind", "Cane of Byrna orbit"
13321 };
13322 char *sfx_string[WAV_COUNT];
13323
13324 63 int32_t readsfx(PACKFILE *f, zquestheader *Header, bool keepdata)
13325 {
13326 //these are here to bypass compiler warnings about unused arguments
13327 63 Header=Header;
13328
13329 int32_t dummy;
13330 63 word s_version=0, s_cversion=0;
13331 //int32_t ret;
13332 SAMPLE temp_sample;
13333 63 temp_sample.loop_start=0;
13334 63 temp_sample.loop_end=0;
13335 63 temp_sample.param=0;
13336
13337 //section version info
13338
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(!p_igetw(&s_version,f,true))
13339 {
13340 return qe_invalid;
13341 }
13342
13343 63 FFCore.quest_format[vSFX] = s_version;
13344
13345 //al_trace("SFX version %d\n", s_version);
13346
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_cversion,f,true))
13347 {
13348 return qe_invalid;
13349 }
13350
13351 //section size
13352
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy,f,true))
13353 {
13354 return qe_invalid;
13355 }
13356
13357 /* HIGHLY UNORTHODOX UPDATING THING, by L
13358 * This fixes quests made before revision 411 (such as the 'Lost Isle Build'),
13359 * where the meaning of GOTOLESS changed. It also coincided with V_SFX
13360 * changing from 1 to 2.
13361 */
13362
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
63 if(s_version < 2 && keepdata)
13363 set_bit(quest_rules,qr_GOTOLESSNOTEQUAL,1);
13364
13365 /* End highly unorthodox updating thing */
13366
13367 63 int32_t wavcount = WAV_COUNT;
13368
13369
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version < 6)
13370 wavcount = 128;
13371
13372 uint8_t tempflag[WAV_COUNT>>3];
13373
13374
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version < 4)
13375 {
13376 memset(tempflag, 0xFF, WAV_COUNT>>3);
13377 }
13378 else
13379 {
13380
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version < 6)
13381 memset(tempflag, 0, WAV_COUNT>>3);
13382
13383
2/2
✓ Branch 0 taken 2016 times.
✓ Branch 1 taken 63 times.
2079 for(int32_t i=0; i<(wavcount>>3); i++)
13384 {
13385 2016 p_getc(&tempflag[i], f, true);
13386 2016 }
13387
13388 }
13389
13390
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version>4)
13391 {
13392
2/2
✓ Branch 0 taken 16065 times.
✓ Branch 1 taken 63 times.
16128 for(int32_t i=1; i<WAV_COUNT; i++)
13393 {
13394
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16065 times.
16065 if(keepdata)
13395 {
13396 16065 sprintf(sfx_string[i],"s%03d",i);
13397
13398
2/2
✓ Branch 0 taken 12285 times.
✓ Branch 1 taken 3780 times.
16065 if((i<Z35))
13399 3780 strcpy(sfx_string[i], old_sfx_string[i-1]);
13400 16065 }
13401
13402
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16065 times.
16065 if(i>=wavcount)
13403 continue;
13404
2/2
✓ Branch 0 taken 436 times.
✓ Branch 1 taken 15629 times.
16065 if(get_bit(tempflag, i-1))
13405 {
13406 char tempname[36];
13407
13408
1/2
✓ Branch 0 taken 436 times.
✗ Branch 1 not taken.
436 if(!pfread(tempname, 36, f, keepdata))
13409 {
13410 return qe_invalid;
13411 }
13412
13413
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 436 times.
436 if(keepdata)
13414 {
13415 436 strcpy(sfx_string[i], tempname);
13416 436 sfx_string[i][35] = 0; //Force NULL Termination
13417 436 }
13418 436 }
13419
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15629 times.
15629 else if(keepdata)
13420 {
13421 15629 sprintf(sfx_string[i],"s%03d",i);
13422
13423
2/2
✓ Branch 0 taken 12099 times.
✓ Branch 1 taken 3530 times.
15629 if(i<Z35)
13424 3530 strcpy(sfx_string[i], old_sfx_string[i-1]);
13425 15629 sfx_string[i][35] = 0; //Force NULL Termination
13426 15629 }
13427 16065 }
13428 63 }
13429 else
13430 {
13431 if(keepdata)
13432 {
13433 for(int32_t i=1; i<WAV_COUNT; i++)
13434 {
13435 sprintf(sfx_string[i],"s%03d",i);
13436
13437 if(i<Z35)
13438 strcpy(sfx_string[i], old_sfx_string[i-1]);
13439 }
13440 }
13441 }
13442
13443 //finally... section data
13444
2/2
✓ Branch 0 taken 16065 times.
✓ Branch 1 taken 63 times.
16128 for(int32_t i=1; i<wavcount; i++)
13445 {
13446
2/2
✓ Branch 0 taken 436 times.
✓ Branch 1 taken 15629 times.
16065 if(get_bit(tempflag, i-1))
13447 {
13448
13449
1/2
✓ Branch 0 taken 436 times.
✗ Branch 1 not taken.
436 if(!p_igetl(&dummy,f,true))
13450 {
13451 return qe_invalid;
13452 }
13453
13454 436 (temp_sample.bits) = dummy;
13455
13456
1/2
✓ Branch 0 taken 436 times.
✗ Branch 1 not taken.
436 if(!p_igetl(&dummy,f,true))
13457 {
13458 return qe_invalid;
13459 }
13460
13461 436 (temp_sample.stereo) = dummy;
13462
13463
1/2
✓ Branch 0 taken 436 times.
✗ Branch 1 not taken.
436 if(!p_igetl(&dummy,f,keepdata))
13464 {
13465 return qe_invalid;
13466 }
13467
13468 436 (temp_sample.freq) = dummy;
13469
13470
1/2
✓ Branch 0 taken 436 times.
✗ Branch 1 not taken.
436 if(!p_igetl(&dummy,f,keepdata))
13471 {
13472 return qe_invalid;
13473 }
13474
13475 436 (temp_sample.priority) = dummy;
13476
13477
1/2
✓ Branch 0 taken 436 times.
✗ Branch 1 not taken.
436 if(!p_igetl(&(temp_sample.len),f,true))
13478 {
13479 return qe_invalid;
13480 }
13481
13482
1/2
✓ Branch 0 taken 436 times.
✗ Branch 1 not taken.
436 if(!p_igetl(&(temp_sample.loop_start),f,keepdata))
13483 {
13484 return qe_invalid;
13485 }
13486
13487
1/2
✓ Branch 0 taken 436 times.
✗ Branch 1 not taken.
436 if(!p_igetl(&(temp_sample.loop_end),f,keepdata))
13488 {
13489 return qe_invalid;
13490 }
13491
13492
1/2
✓ Branch 0 taken 436 times.
✗ Branch 1 not taken.
436 if(!p_igetl(&(temp_sample.param),f,keepdata))
13493 {
13494 return qe_invalid;
13495 }
13496
13497 // al_trace("F%i: L%i\n",i,temp_sample.len);
13498 // temp_sample.data = new byte[(temp_sample.bits==8?1:2)*temp_sample.len];
13499 436 int32_t len = (temp_sample.bits==8?1:2)*(temp_sample.stereo==0?1:2)*temp_sample.len;
13500 436 temp_sample.data = calloc(len,1);
13501
13502
1/2
✓ Branch 0 taken 436 times.
✗ Branch 1 not taken.
436 if(s_version < 3)
13503 len = (temp_sample.bits==8?1:2)*temp_sample.len;
13504
13505 //old-style, non-portable loading (Bad Allegro! Bad!!) -DD
13506
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 436 times.
436 if(s_version < 2)
13507 {
13508 if(!pfread(temp_sample.data, len,f,keepdata))
13509 {
13510 return qe_invalid;
13511 }
13512 }
13513 else
13514 {
13515 //re-endianfy the data
13516 436 int32_t wordstoread = len / sizeof(word);
13517
13518
2/2
✓ Branch 0 taken 13011628 times.
✓ Branch 1 taken 436 times.
13012064 for(int32_t j=0; j<wordstoread; j++)
13519 {
13520 word temp;
13521
13522
1/2
✓ Branch 0 taken 13011628 times.
✗ Branch 1 not taken.
13011628 if(!p_igetw(&temp, f, keepdata))
13523 {
13524 return qe_invalid;
13525 }
13526
13527
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 13011628 times.
13011628 if(keepdata)
13528 13011628 ((word *)temp_sample.data)[j] = temp;
13529 13011628 }
13530 }
13531 436 }
13532
2/2
✓ Branch 0 taken 3530 times.
✓ Branch 1 taken 12099 times.
15629 else if(i < Z35)
13533 {
13534 3530 SAMPLE* datsamp = (SAMPLE*)(sfxdata[i].dat);
13535 3530 memcpy(&temp_sample, datsamp, sizeof(SAMPLE));
13536 3530 set_bit(tempflag, i-1, 1);
13537 3530 int32_t len = (temp_sample.bits==8?1:2)*(temp_sample.stereo==0?1:2)*temp_sample.len;
13538 3530 temp_sample.data = calloc(len,1);
13539 3530 memcpy(temp_sample.data, datsamp->data, len);
13540 3530 }
13541 12099 else continue;
13542
13543
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3966 times.
3966 if(keepdata)
13544 {
13545
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3966 times.
3966 if(customsfxdata[i].data!=NULL)
13546 {
13547 // delete [] customsfxdata[i].data;
13548 3966 free(customsfxdata[i].data);
13549 3966 }
13550
13551 // customsfxdata[i].data = new byte[(temp_sample.bits==8?1:2)*temp_sample.len];
13552 3966 int32_t len2 = (temp_sample.bits==8?1:2)*(temp_sample.stereo==0?1:2)*temp_sample.len;
13553 3966 customsfxdata[i].data = calloc(len2,1);
13554 3966 customsfxdata[i].bits = temp_sample.bits;
13555 3966 customsfxdata[i].stereo = temp_sample.stereo;
13556 3966 customsfxdata[i].freq = temp_sample.freq;
13557 3966 customsfxdata[i].priority = temp_sample.priority;
13558 3966 customsfxdata[i].len = temp_sample.len;
13559 3966 customsfxdata[i].loop_start = temp_sample.loop_start;
13560 3966 customsfxdata[i].loop_end = temp_sample.loop_end;
13561 3966 customsfxdata[i].param = temp_sample.param;
13562 3966 int32_t cpylen = len2;
13563
13564
1/2
✓ Branch 0 taken 3966 times.
✗ Branch 1 not taken.
3966 if(s_version<3)
13565 {
13566 cpylen = (temp_sample.bits==8?1:2)*temp_sample.len;
13567 al_trace("WARNING: Quest SFX %d is in stereo, and may be corrupt.\n",i);
13568 }
13569
13570 3966 memcpy(customsfxdata[i].data,temp_sample.data,cpylen);
13571 3966 }
13572
13573 3966 free(temp_sample.data);
13574 3966 }
13575
13576
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata)
13577 63 memcpy(customsfxflag, tempflag, WAV_COUNT>>3);
13578
13579 63 sfxdat=0;
13580 63 return 0;
13581 63 }
13582
13583 63 void setupsfx()
13584 {
13585
2/2
✓ Branch 0 taken 16065 times.
✓ Branch 1 taken 63 times.
16128 for(int32_t i=1; i<WAV_COUNT; i++)
13586 {
13587 16065 sprintf(sfx_string[i],"s%03d",i);
13588
13589
2/2
✓ Branch 0 taken 12285 times.
✓ Branch 1 taken 3780 times.
16065 if(i<Z35)
13590 {
13591 3780 strcpy(sfx_string[i], old_sfx_string[i-1]);
13592 3780 }
13593
13594 16065 memset(customsfxflag, 0, WAV_COUNT>>3);
13595
13596 16065 int32_t j=i;
13597
13598
2/2
✓ Branch 0 taken 3843 times.
✓ Branch 1 taken 12222 times.
16065 if(i>Z35)
13599 {
13600 12222 i=Z35;
13601 12222 }
13602
13603 16065 SAMPLE *temp_sample = (SAMPLE *)sfxdata[i].dat;
13604
13605
2/2
✓ Branch 0 taken 3060 times.
✓ Branch 1 taken 13005 times.
16065 if(customsfxdata[j].data!=NULL)
13606 {
13607 // delete [] customsfxdata[j].data;
13608 13005 free(customsfxdata[j].data);
13609 13005 }
13610
13611 // customsfxdata[j].data = new byte[(temp_sample->bits==8?1:2)*temp_sample->len];
13612 16065 customsfxdata[j].data = calloc((temp_sample->bits==8?1:2)*(temp_sample->stereo == 0 ? 1 : 2)*temp_sample->len,1);
13613 16065 customsfxdata[j].bits = temp_sample->bits;
13614 16065 customsfxdata[j].stereo = temp_sample->stereo;
13615 16065 customsfxdata[j].freq = temp_sample->freq;
13616 16065 customsfxdata[j].priority = temp_sample->priority;
13617 16065 customsfxdata[j].len = temp_sample->len;
13618 16065 customsfxdata[j].loop_start = temp_sample->loop_start;
13619 16065 customsfxdata[j].loop_end = temp_sample->loop_end;
13620 16065 customsfxdata[j].param = temp_sample->param;
13621 16065 memcpy(customsfxdata[j].data, (temp_sample->data), (temp_sample->bits==8?1:2)*(temp_sample->stereo==0 ? 1 : 2)*temp_sample->len);
13622 16065 i=j;
13623 16065 }
13624 63 }
13625
13626 extern char *guy_string[eMAXGUYS];
13627 extern const char *old_guy_string[OLDMAXGUYS];
13628
13629 63 int32_t readguys(PACKFILE *f, zquestheader *Header, bool keepdata)
13630 {
13631 dword dummy;
13632 word guy_cversion;
13633 63 word guyversion=0;
13634
13635
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(Header->zelda_version >= 0x193)
13636 {
13637 //section version info
13638
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&guyversion,f,true))
13639 {
13640 return qe_invalid;
13641 }
13642
13643 63 FFCore.quest_format[vGuys] = guyversion;
13644
13645 //al_trace("Guys version %d\n", guyversion);
13646
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&guy_cversion,f,true))
13647 {
13648 return qe_invalid;
13649 }
13650 63 al_trace("Guy CVersion is: %d\n", guy_cversion);
13651 //section size
13652
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy,f,true))
13653 {
13654 return qe_invalid;
13655 }
13656 63 }
13657
13658
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(guyversion > 3)
13659 {
13660
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 63 times.
32319 for(int32_t i=0; i<MAXGUYS; i++)
13661 {
13662 char tempname[64];
13663
13664 // rev. 1511 : guyversion = 23. upped to 512 editable enemies. -Gleeok
13665 // if guyversion < 23 then there is only 256 enemies in the packfile, so default the rest.
13666
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
32256 if(guyversion < 23 && i >= OLDBETAMAXGUYS && keepdata)
13667 {
13668 memset(tempname, 0, sizeof(char)*64);
13669 sprintf(tempname, "e%03d", i);
13670 strcpy(guy_string[i], tempname);
13671
13672 continue;
13673 }
13674
13675
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!pfread(tempname, 64, f, keepdata))
13676 {
13677 return qe_invalid;
13678 }
13679
13680 // Don't retain names of uneditable enemy entries!
13681
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
32256 if(keepdata)
13682 {
13683 // for version upgrade to 2.5
13684
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
32256 if(guyversion < 23 && i >= 177)
13685 {
13686 // some of the older builds have names such as 'zz123',
13687 // (this order gets messed up with some eXXX and some zzXXX)
13688 // so let's update to the newer naming convection. -Gleeok
13689 char tmpbuf[64];
13690 memset(tmpbuf, 0, sizeof(char)*64);
13691 sprintf(tmpbuf, "zz%03d", i);
13692
13693 if(memcmp(tempname, tmpbuf, size_t(5)) == 0)
13694 {
13695 memset(tempname, 0, sizeof(char)*64);
13696 sprintf(tempname, "e%03d", i);
13697 }
13698 }
13699
13700
6/6
✓ Branch 0 taken 11151 times.
✓ Branch 1 taken 21105 times.
✓ Branch 2 taken 10584 times.
✓ Branch 3 taken 567 times.
✓ Branch 4 taken 8381 times.
✓ Branch 5 taken 2203 times.
32256 if(i >= OLDMAXGUYS || strlen(tempname)<1 || tempname[strlen(tempname)-1]!=' ')
13701 {
13702 30053 strcpy(guy_string[i], tempname);
13703 30053 }
13704 else
13705 {
13706 2203 strcpy(guy_string[i],old_guy_string[i]);
13707 }
13708 32256 }
13709 32256 }
13710 63 }
13711 else
13712 {
13713 if(keepdata)
13714 {
13715 for(int32_t i=0; i<eMAXGUYS; i++)
13716 {
13717 sprintf(guy_string[i],"zz%03d",i);
13718 }
13719
13720 for(int32_t i=0; i<OLDMAXGUYS; i++)
13721 {
13722 strcpy(guy_string[i],old_guy_string[i]);
13723 }
13724 }
13725 }
13726
13727
13728 //finally... section data
13729
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata)
13730 {
13731 63 init_guys(guyversion); //using default data for now...
13732
13733 // Goriya guy fix
13734
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((Header->zelda_version < 0x211)||((Header->zelda_version == 0x211)&&(Header->build<7)))
13735 {
13736 if(get_bit(quest_rules,qr_NEWENEMYTILES))
13737 {
13738 guysbuf[gGORIYA].tile=130;
13739 guysbuf[gGORIYA].e_tile=130;
13740 }
13741 }
13742 63 }
13743
13744
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(Header->zelda_version < 0x193)
13745 {
13746 if(get_bit(deprecated_rules,46))
13747 {
13748 guysbuf[eDODONGO].cset=14;
13749 guysbuf[eDODONGO].bosspal=spDIG;
13750 }
13751 }
13752 // Not sure when this first changed, but it's necessary for 2.10, at least
13753 // @TODO: @BUG:1.92 - 1.84? Figure this out exactly for the final 2.50 release.
13754 //2.10 Fixes
13755
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((Header->zelda_version < 0x211)||((Header->zelda_version == 0x211)&&(Header->build<18)))
13756 {
13757 guysbuf[eWWIZ].editorflags |= ENEMY_FLAG5;
13758 guysbuf[eMOLDORM].editorflags |= ENEMY_FLAG6;
13759 guysbuf[eMANHAN].editorflags |= ENEMY_FLAG6;
13760 guysbuf[eCENT1].misc3 = 1;
13761 guysbuf[eCENT2].misc3 = 1;
13762 }
13763
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((Header->zelda_version <= 0x255) || (Header->zelda_version == 0x255 && Header->build < 47) )
13764 {
13765 63 guysbuf[eWPOLSV].defense[edefWhistle] = ed1HKO;
13766 63 }
13767
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(Header->zelda_version <= 0x210)
13768 {
13769 guysbuf[eGLEEOK1F].misc6 = 16;
13770 guysbuf[eGLEEOK2F].misc6 = 16;
13771 guysbuf[eGLEEOK3F].misc6 = 16;
13772 guysbuf[eGLEEOK4F].misc6 = 16;
13773
13774 guysbuf[eWIZ1].misc4 = 1; //only set the enemy that needs backward compat, not all of them.
13775 guysbuf[eBATROBE].misc4 = 1;
13776 //guysbuf[eSUMMONER].misc4 = 1;
13777 guysbuf[eWWIZ].misc4 = 1;
13778 guysbuf[eDODONGO].deadsfx = 15; //In 2.10 and earlier, Dodongos used this as their death sound.
13779 guysbuf[eDODONGOBS].deadsfx = 15; //In 2.10 and earlier, Dodongos used this as their death sound.
13780 }
13781
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(Header->zelda_version == 0x190)
13782 {
13783 al_trace("Setting Tribble Properties for Version: %x", Header->zelda_version);
13784 guysbuf[eKEESETRIB].misc3 = eVIRE; //1.90 and earlier, keese and gel tribbles grew up into
13785 guysbuf[eGELTRIB].misc3 = eZOL; //normal vires, and zols -Z (16th January, 2019 )
13786 }
13787
13788 // The versions here may not be correct
13789 // zelda_version>=0x211 handled at guyversion<24
13790
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(Header->zelda_version <= 0x190)
13791 {
13792 guysbuf[eCENT1].misc3 = 0;
13793 guysbuf[eCENT2].misc3 = 0;
13794 guysbuf[eMOLDORM].misc2 = 0;
13795 //guysbuf[eKEESETRIB].misc3 = eVIRE; //1.90 and earlier, keese and gel tribbles grew up into
13796 //guysbuf[eGELTRIB].misc3 = eZOL; //normal vires, and zols -Z (16th January, 2019 )
13797 }
13798
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 else if(Header->zelda_version <= 0x210)
13799 {
13800 guysbuf[eCENT1].misc3 = 1;
13801 guysbuf[eCENT2].misc3 = 1;
13802 guysbuf[eMOLDORM].misc2 = 0;
13803 }
13804
13805
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if ( Header->zelda_version < 0x211 ) //Default rest rates for phantom ghinis, peahats and keese in < 2.50 quests
13806 {
13807 guysbuf[eKEESE1].misc16 = 120;
13808 guysbuf[eKEESE2].misc16 = 120;
13809 guysbuf[eKEESE3].misc16 = 120;
13810 guysbuf[eKEESETRIB].misc16 = 120;
13811 guysbuf[eKEESE1].misc17 = 16;
13812 guysbuf[eKEESE2].misc17 = 16;
13813 guysbuf[eKEESE3].misc17 = 16;
13814 guysbuf[eKEESETRIB].misc17 = 16;
13815
13816 guysbuf[ePEAHAT].misc16 = 80;
13817 guysbuf[ePEAHAT].misc17 = 16;
13818
13819 guysbuf[eGHINI2].misc16 = 120;
13820 guysbuf[eGHINI2].misc17 = 10;
13821
13822 }
13823
13824
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(guyversion<=2)
13825 {
13826 return readherosprites2(f, guyversion==2?0:-1, 0, keepdata);
13827 }
13828
13829
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(guyversion > 3)
13830 {
13831 guydata tempguy;
13832
13833
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 63 times.
32319 for(int32_t i=0; i<MAXGUYS; i++)
13834 {
13835
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
32256 if(guyversion < 23 && keepdata) // May 2012 : 512 max enemies
13836 {
13837 if(i >= OLDBETAMAXGUYS)
13838 {
13839 memset(&guysbuf[i], 0, sizeof(guydata));
13840 continue;
13841 }
13842 }
13843
13844 32256 memset(&tempguy, 0, sizeof(guydata));
13845
13846
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetl(&(tempguy.flags),f,keepdata))
13847 {
13848 return qe_invalid;
13849 }
13850
13851
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetl(&(tempguy.flags2),f,keepdata))
13852 {
13853 return qe_invalid;
13854 }
13855
13856
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if ( guyversion >= 36 ) //expanded tiles
13857 {
13858
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.tile),f,keepdata))
13859 {
13860 return qe_invalid;
13861 }
13862 2048 }
13863 else
13864 {
13865
1/2
✓ Branch 0 taken 30208 times.
✗ Branch 1 not taken.
30208 if(!p_igetw(&(tempguy.tile),f,keepdata))
13866 {
13867 return qe_invalid;
13868 }
13869 }
13870
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&(tempguy.width),f,keepdata))
13871 {
13872 return qe_invalid;
13873 }
13874
13875
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&(tempguy.height),f,keepdata))
13876 {
13877 return qe_invalid;
13878 }
13879
13880
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if ( guyversion >= 36 ) //expanded tiles
13881 {
13882
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.s_tile),f,keepdata))
13883 {
13884 return qe_invalid;
13885 }
13886 2048 }
13887 else
13888 {
13889
1/2
✓ Branch 0 taken 30208 times.
✗ Branch 1 not taken.
30208 if(!p_igetw(&(tempguy.s_tile),f,keepdata))
13890 {
13891 return qe_invalid;
13892 }
13893 }
13894
13895
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&(tempguy.s_width),f,keepdata))
13896 {
13897 return qe_invalid;
13898 }
13899
13900
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&(tempguy.s_height),f,keepdata))
13901 {
13902 return qe_invalid;
13903 }
13904
13905
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if ( guyversion >= 36 ) //expanded tiles
13906 {
13907
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.e_tile),f,keepdata))
13908 {
13909 return qe_invalid;
13910 }
13911 2048 }
13912 else
13913 {
13914
1/2
✓ Branch 0 taken 30208 times.
✗ Branch 1 not taken.
30208 if(!p_igetw(&(tempguy.e_tile),f,keepdata))
13915 {
13916 return qe_invalid;
13917 }
13918 }
13919
13920
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&(tempguy.e_width),f,keepdata))
13921 {
13922 return qe_invalid;
13923 }
13924
13925
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&(tempguy.e_height),f,keepdata))
13926 {
13927 return qe_invalid;
13928 }
13929
13930
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.hp),f,keepdata))
13931 {
13932 return qe_invalid;
13933 }
13934
13935
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.family),f,keepdata))
13936 {
13937 return qe_invalid;
13938 }
13939
13940
1/12
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
32256 if(guyversion < 9 && (i==eDKNUT1 || i==eDKNUT2 || i==eDKNUT3 || i==eDKNUT4 || i==eDKNUT5)) // Whoops, forgot about Darknuts...
13941 {
13942 if(get_bit(quest_rules,qr_NEWENEMYTILES))
13943 {
13944 tempguy.s_tile=tempguy.e_tile+120;
13945 tempguy.s_width=tempguy.e_width;
13946 tempguy.s_height=tempguy.e_height;
13947 }
13948 else tempguy.s_tile=860;
13949 }
13950
13951
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.cset),f,keepdata))
13952 {
13953 return qe_invalid;
13954 }
13955
13956
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.anim),f,keepdata))
13957 {
13958 return qe_invalid;
13959 }
13960
13961
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.e_anim),f,keepdata))
13962 {
13963 return qe_invalid;
13964 }
13965
13966
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.frate),f,keepdata))
13967 {
13968 return qe_invalid;
13969 }
13970
13971
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.e_frate),f,keepdata))
13972 {
13973 return qe_invalid;
13974 }
13975
13976
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 13) // April 2009
13977 {
13978 if(get_bit(deprecated_rules, qr_SLOWENEMYANIM_DEP))
13979 {
13980 tempguy.frate *= 2;
13981 tempguy.e_frate *= 2;
13982 }
13983 }
13984
13985
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 14) // May 1 2009
13986 {
13987 if(tempguy.anim==a2FRMSLOW)
13988 {
13989 tempguy.anim=a2FRM;
13990 tempguy.frate *= 2;
13991 }
13992
13993 if(tempguy.e_anim==a2FRMSLOW)
13994 {
13995 tempguy.e_anim=a2FRM;
13996 tempguy.e_frate *= 2;
13997 }
13998
13999 if(tempguy.anim==aFLIPSLOW)
14000 {
14001 tempguy.anim=aFLIP;
14002 tempguy.frate *= 2;
14003 }
14004
14005 if(tempguy.e_anim==aFLIPSLOW)
14006 {
14007 tempguy.e_anim=aFLIP;
14008 tempguy.e_frate *= 2;
14009 }
14010
14011 if(tempguy.anim == aNEWDWALK) tempguy.anim = a4FRM4DIR;
14012
14013 if(tempguy.e_anim == aNEWDWALK) tempguy.e_anim = a4FRM4DIR;
14014
14015 if(tempguy.anim == aNEWPOLV || tempguy.anim == a4FRM3TRAP)
14016 {
14017 tempguy.anim=a4FRM4DIR;
14018 tempguy.s_tile=(get_bit(quest_rules,qr_NEWENEMYTILES) ? tempguy.e_tile : tempguy.tile)+20;
14019 }
14020
14021 if(tempguy.e_anim == aNEWPOLV || tempguy.e_anim == a4FRM3TRAP)
14022 {
14023 tempguy.e_anim=a4FRM4DIR;
14024 tempguy.s_tile=(get_bit(quest_rules,qr_NEWENEMYTILES) ? tempguy.e_tile : tempguy.tile)+20;
14025 }
14026 }
14027
14028
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.dp),f,keepdata))
14029 {
14030 return qe_invalid;
14031 }
14032
14033 //correction for guy fire
14034
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 6)
14035 {
14036 if(i == gFIRE)
14037 tempguy.dp = 2;
14038 }
14039
14040
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.wdp),f,keepdata))
14041 {
14042 return qe_invalid;
14043 }
14044
14045
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.weapon),f,keepdata))
14046 {
14047 return qe_invalid;
14048 }
14049
14050 //correction for bosses using triple, "rising" fireballs
14051
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 5)
14052 {
14053 if(i == eLAQUAM || i == eRAQUAM || i == eGOHMA1 || i == eGOHMA2 ||
14054 i == eGOHMA3 || i == eGOHMA4)
14055 {
14056 if(tempguy.weapon == ewFireball)
14057 tempguy.weapon = ewFireball2;
14058 }
14059 }
14060
14061
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.rate),f,keepdata))
14062 {
14063 return qe_invalid;
14064 }
14065
14066
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.hrate),f,keepdata))
14067 {
14068 return qe_invalid;
14069 }
14070
14071
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.step),f,keepdata))
14072 {
14073 return qe_invalid;
14074 }
14075
14076 // HIGHLY UNORTHODOX UPDATING THING, part 2
14077
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
32256 if(fixpolsvoice && tempguy.family==eePOLSV)
14078 {
14079 tempguy.step /= 2;
14080 }
14081
14082
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.homing),f,keepdata))
14083 {
14084 return qe_invalid;
14085 }
14086
14087
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.grumble),f,keepdata))
14088 {
14089 return qe_invalid;
14090 }
14091
14092
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.item_set),f,keepdata))
14093 {
14094 return qe_invalid;
14095 }
14096
14097
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion>=22) // Version 22: Expand misc attributes to 32 bits
14098 {
14099
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetl(&(tempguy.misc1),f,keepdata))
14100 {
14101 return qe_invalid;
14102 }
14103
14104
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetl(&(tempguy.misc2),f,keepdata))
14105 {
14106 return qe_invalid;
14107 }
14108
14109
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetl(&(tempguy.misc3),f,keepdata))
14110 {
14111 return qe_invalid;
14112 }
14113
14114
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetl(&(tempguy.misc4),f,keepdata))
14115 {
14116 return qe_invalid;
14117 }
14118
14119
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetl(&(tempguy.misc5),f,keepdata))
14120 {
14121 return qe_invalid;
14122 }
14123
14124
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetl(&(tempguy.misc6),f,keepdata))
14125 {
14126 return qe_invalid;
14127 }
14128
14129
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetl(&(tempguy.misc7),f,keepdata))
14130 {
14131 return qe_invalid;
14132 }
14133
14134
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetl(&(tempguy.misc8),f,keepdata))
14135 {
14136 return qe_invalid;
14137 }
14138
14139
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetl(&(tempguy.misc9),f,keepdata))
14140 {
14141 return qe_invalid;
14142 }
14143
14144
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetl(&(tempguy.misc10),f,keepdata))
14145 {
14146 return qe_invalid;
14147 }
14148 32256 }
14149 else
14150 {
14151 int16_t tempMisc;
14152
14153 if(!p_igetw(&tempMisc,f,keepdata))
14154 {
14155 return qe_invalid;
14156 }
14157
14158 tempguy.misc1=tempMisc;
14159
14160 if(!p_igetw(&tempMisc,f,keepdata))
14161 {
14162 return qe_invalid;
14163 }
14164
14165 tempguy.misc2=tempMisc;
14166
14167 if(!p_igetw(&tempMisc,f,keepdata))
14168 {
14169 return qe_invalid;
14170 }
14171
14172 tempguy.misc3=tempMisc;
14173
14174 if(!p_igetw(&tempMisc,f,keepdata))
14175 {
14176 return qe_invalid;
14177 }
14178
14179 tempguy.misc4=tempMisc;
14180
14181 if(!p_igetw(&tempMisc,f,keepdata))
14182 {
14183 return qe_invalid;
14184 }
14185
14186 tempguy.misc5=tempMisc;
14187
14188 if(guyversion < 13) // April 2009 - a tiny Wizzrobe update
14189 {
14190 if(tempguy.family == eeWIZZ && !(tempguy.misc1))
14191 tempguy.misc5 = 74;
14192 }
14193
14194 if(!p_igetw(&tempMisc,f,keepdata))
14195 {
14196 return qe_invalid;
14197 }
14198
14199 tempguy.misc6=tempMisc;
14200
14201 if(!p_igetw(&tempMisc,f,keepdata))
14202 {
14203 return qe_invalid;
14204 }
14205
14206 tempguy.misc7=tempMisc;
14207
14208 if(!p_igetw(&tempMisc,f,keepdata))
14209 {
14210 return qe_invalid;
14211 }
14212
14213 tempguy.misc8=tempMisc;
14214
14215 if(!p_igetw(&tempMisc,f,keepdata))
14216 {
14217 return qe_invalid;
14218 }
14219
14220 tempguy.misc9=tempMisc;
14221
14222 if(!p_igetw(&tempMisc,f,keepdata))
14223 {
14224 return qe_invalid;
14225 }
14226
14227 tempguy.misc10=tempMisc;
14228 }
14229
14230
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.bgsfx),f,keepdata))
14231 {
14232 return qe_invalid;
14233 }
14234
14235
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.bosspal),f,keepdata))
14236 {
14237 return qe_invalid;
14238 }
14239
14240
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetw(&(tempguy.extend),f,keepdata))
14241 {
14242 return qe_invalid;
14243 }
14244
14245 //! Enemy Defences
14246
14247 //If a 2.50 quest, use only the 2.5 defences.
14248
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
32256 if(guyversion >= 16 ) // November 2009 - Super Enemy Editor
14249 {
14250
2/2
✓ Branch 0 taken 612864 times.
✓ Branch 1 taken 32256 times.
645120 for(int32_t j=0; j<edefLAST; j++)
14251 {
14252
1/2
✓ Branch 0 taken 612864 times.
✗ Branch 1 not taken.
612864 if(!p_getc(&(tempguy.defense[j]),f,keepdata))
14253 {
14254 return qe_invalid;
14255 }
14256 612864 }
14257 //then copy the generic script defence to all the new script defences
14258
14259 32256 }
14260
14261
14262
14263
14264
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
32256 if(guyversion >= 18)
14265 {
14266
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&(tempguy.hitsfx),f,keepdata))
14267 {
14268 return qe_invalid;
14269 }
14270
14271
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_getc(&(tempguy.deadsfx),f,keepdata))
14272 {
14273 return qe_invalid;
14274 }
14275 32256 }
14276
14277
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion >= 22)
14278 {
14279
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetl(&(tempguy.misc11),f,keepdata))
14280 {
14281 return qe_invalid;
14282 }
14283
14284
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!p_igetl(&(tempguy.misc12),f,keepdata))
14285 {
14286 return qe_invalid;
14287 }
14288 32256 }
14289 else if(guyversion >= 19)
14290 {
14291 int16_t tempMisc;
14292
14293 if(!p_igetw(&tempMisc,f,keepdata))
14294 {
14295 return qe_invalid;
14296 }
14297
14298 tempguy.misc11=tempMisc;
14299
14300 if(!p_igetw(&tempMisc,f,keepdata))
14301 {
14302 return qe_invalid;
14303 }
14304
14305 tempguy.misc12=tempMisc;
14306 }
14307
14308 //If a 2.54 or later quest, use all of the defences.
14309
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
32256 if(guyversion > 24) // Add new guyversion conditional statement
14310 {
14311
2/2
✓ Branch 0 taken 45056 times.
✓ Branch 1 taken 2048 times.
47104 for(int32_t j=edefLAST; j<edefLAST255; j++)
14312 {
14313
1/2
✓ Branch 0 taken 45056 times.
✗ Branch 1 not taken.
45056 if(!p_getc(&(tempguy.defense[j]),f,keepdata))
14314 {
14315 return qe_invalid;
14316 }
14317 45056 }
14318 2048 }
14319
14320
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if(guyversion <= 24) // Port over generic script settings from old quests in the new editor.
14321 {
14322
2/2
✓ Branch 0 taken 302080 times.
✓ Branch 1 taken 30208 times.
332288 for(int32_t j=edefSCRIPT01; j<=edefSCRIPT10; j++)
14323 {
14324 302080 tempguy.defense[j] = tempguy.defense[edefSCRIPT] ;
14325 302080 }
14326 30208 }
14327
14328 //tilewidth, tileheight, hitwidth, hitheight, hitzheight, hitxofs, hityofs, hitzofs
14329
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
32256 if(guyversion > 25)
14330 {
14331
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.txsz),f,keepdata))
14332 {
14333 return qe_invalid;
14334 }
14335
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.tysz),f,keepdata))
14336 {
14337 return qe_invalid;
14338 }
14339
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.hxsz),f,keepdata))
14340 {
14341 return qe_invalid;
14342 }
14343
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.hysz),f,keepdata))
14344 {
14345 return qe_invalid;
14346 }
14347
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.hzsz),f,keepdata))
14348 {
14349 return qe_invalid;
14350 }
14351 /* Is it safe to read a fixed with getl, or do I need to typecast it? -Z
14352
14353 */
14354 2048 }
14355 //More Enemy Editor vars for 2.60
14356
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
32256 if(guyversion > 26)
14357 {
14358
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.hxofs),f,keepdata))
14359 {
14360 return qe_invalid;
14361 }
14362
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.hyofs),f,keepdata))
14363 {
14364 return qe_invalid;
14365 }
14366
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.xofs),f,keepdata))
14367 {
14368 return qe_invalid;
14369 }
14370
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.yofs),f,keepdata))
14371 {
14372 return qe_invalid;
14373 }
14374
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.zofs),f,keepdata))
14375 {
14376 return qe_invalid;
14377 }
14378 2048 }
14379
14380
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if(guyversion <= 27) // Port over generic script settings from old quests in the new editor.
14381 {
14382 30208 tempguy.wpnsprite = 0;
14383 30208 }
14384
14385
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
32256 if(guyversion > 27)
14386 {
14387
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.wpnsprite),f,keepdata))
14388 {
14389 return qe_invalid;
14390 }
14391 2048 }
14392
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if(guyversion <= 28) // Port over generic script settings from old quests in the new editor.
14393 {
14394 30208 tempguy.SIZEflags = 0;
14395 30208 }
14396
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
32256 if(guyversion > 28)
14397 {
14398
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.SIZEflags),f,keepdata))
14399 {
14400 return qe_invalid;
14401 }
14402
14403 2048 }
14404
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if(guyversion < 30) // Port over generic script settings from old quests in the new editor.
14405 {
14406 30208 tempguy.frozentile = 0;
14407 30208 tempguy.frozencset = 0;
14408 30208 tempguy.frozenclock = 0;
14409
2/2
✓ Branch 0 taken 302080 times.
✓ Branch 1 taken 30208 times.
332288 for ( int32_t q = 0; q < 10; q++ ) tempguy.frozenmisc[q] = 0;
14410 30208 }
14411
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
32256 if(guyversion >= 30)
14412 {
14413
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.frozentile),f,keepdata))
14414 {
14415 return qe_invalid;
14416 }
14417
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.frozencset),f,keepdata))
14418 {
14419 return qe_invalid;
14420 }
14421
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.frozenclock),f,keepdata))
14422 {
14423 return qe_invalid;
14424 }
14425
2/2
✓ Branch 0 taken 20480 times.
✓ Branch 1 taken 2048 times.
22528 for ( int32_t q = 0; q < 10; q++ ) {
14426
1/2
✓ Branch 0 taken 20480 times.
✗ Branch 1 not taken.
20480 if(!p_igetw(&(tempguy.frozenmisc[q]),f,keepdata))
14427 {
14428 return qe_invalid;
14429 }
14430 20480 }
14431
14432 2048 }
14433
14434
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
32256 if(guyversion >= 34)
14435 {
14436
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetw(&(tempguy.firesfx),f,keepdata))
14437 {
14438 return qe_invalid;
14439 }
14440
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc16),f,keepdata))
14441 {
14442 return qe_invalid;
14443 }
14444
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc17),f,keepdata))
14445 {
14446 return qe_invalid;
14447 }
14448
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc18),f,keepdata))
14449 {
14450 return qe_invalid;
14451 }
14452
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc19),f,keepdata))
14453 {
14454 return qe_invalid;
14455 }
14456
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc20),f,keepdata))
14457 {
14458 return qe_invalid;
14459 }
14460
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc21),f,keepdata))
14461 {
14462 return qe_invalid;
14463 }
14464
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc22),f,keepdata))
14465 {
14466 return qe_invalid;
14467 }
14468
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc23),f,keepdata))
14469 {
14470 return qe_invalid;
14471 }
14472
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc24),f,keepdata))
14473 {
14474 return qe_invalid;
14475 }
14476
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc25),f,keepdata))
14477 {
14478 return qe_invalid;
14479 }
14480
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc26),f,keepdata))
14481 {
14482 return qe_invalid;
14483 }
14484
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc27),f,keepdata))
14485 {
14486 return qe_invalid;
14487 }
14488
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc28),f,keepdata))
14489 {
14490 return qe_invalid;
14491 }
14492
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc29),f,keepdata))
14493 {
14494 return qe_invalid;
14495 }
14496
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc30),f,keepdata))
14497 {
14498 return qe_invalid;
14499 }
14500
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc31),f,keepdata))
14501 {
14502 return qe_invalid;
14503 }
14504
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc32),f,keepdata))
14505 {
14506 return qe_invalid;
14507 }
14508
14509
2/2
✓ Branch 0 taken 65536 times.
✓ Branch 1 taken 2048 times.
67584 for ( int32_t q = 0; q < 32; q++ ) {
14510
1/2
✓ Branch 0 taken 65536 times.
✗ Branch 1 not taken.
65536 if(!p_igetl(&(tempguy.movement[q]),f,keepdata))
14511 {
14512 return qe_invalid;
14513 }
14514 65536 }
14515
2/2
✓ Branch 0 taken 65536 times.
✓ Branch 1 taken 2048 times.
67584 for ( int32_t q = 0; q < 32; q++ ) {
14516
1/2
✓ Branch 0 taken 65536 times.
✗ Branch 1 not taken.
65536 if(!p_igetl(&(tempguy.new_weapon[q]),f,keepdata))
14517 {
14518 return qe_invalid;
14519 }
14520 65536 }
14521
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetw(&(tempguy.script),f,keepdata))
14522 {
14523 return qe_invalid;
14524 }
14525 //al_trace("NPC Script ID is: %d\n",tempguy.script);
14526
2/2
✓ Branch 0 taken 16384 times.
✓ Branch 1 taken 2048 times.
18432 for ( int32_t q = 0; q < 8; q++ )
14527 {
14528
1/2
✓ Branch 0 taken 16384 times.
✗ Branch 1 not taken.
16384 if(!p_igetl(&(tempguy.initD[q]),f,keepdata))
14529 {
14530 return qe_invalid;
14531 }
14532 16384 }
14533
2/2
✓ Branch 0 taken 4096 times.
✓ Branch 1 taken 2048 times.
6144 for ( int32_t q = 0; q < 2; q++ )
14534 {
14535
1/2
✓ Branch 0 taken 4096 times.
✗ Branch 1 not taken.
4096 if(!p_igetl(&(tempguy.initA[q]),f,keepdata))
14536 {
14537 return qe_invalid;
14538 }
14539 4096 }
14540
14541 2048 }
14542
14543
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
32256 if(guyversion >= 37)
14544 {
14545
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.editorflags),f,keepdata))
14546 {
14547 return qe_invalid;
14548 }
14549 2048 }
14550
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if ( guyversion < 37 ) { tempguy.editorflags = 0; }
14551
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
32256 if(guyversion >= 38)
14552 {
14553
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc13),f,keepdata))
14554 {
14555 return qe_invalid;
14556 }
14557
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc14),f,keepdata))
14558 {
14559 return qe_invalid;
14560 }
14561
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetl(&(tempguy.misc15),f,keepdata))
14562 {
14563 return qe_invalid;
14564 }
14565
14566 2048 }
14567
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if ( guyversion < 38 )
14568 {
14569 30208 tempguy.misc13 = 0;
14570 30208 tempguy.misc14 = 0;
14571 30208 tempguy.misc15 = 0;
14572 30208 }
14573
14574
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
32256 if ( guyversion >= 39 )
14575 {
14576
2/2
✓ Branch 0 taken 16384 times.
✓ Branch 1 taken 2048 times.
18432 for ( int32_t q = 0; q < 8; q++ )
14577 {
14578
2/2
✓ Branch 0 taken 1064960 times.
✓ Branch 1 taken 16384 times.
1081344 for ( int32_t w = 0; w < 65; w++ )
14579 {
14580
1/2
✓ Branch 0 taken 1064960 times.
✗ Branch 1 not taken.
1064960 if(!p_getc(&(tempguy.initD_label[q][w]),f,keepdata))
14581 {
14582 return qe_invalid;
14583 }
14584 1064960 }
14585
2/2
✓ Branch 0 taken 1064960 times.
✓ Branch 1 taken 16384 times.
1081344 for ( int32_t w = 0; w < 65; w++ )
14586 {
14587
1/2
✓ Branch 0 taken 1064960 times.
✗ Branch 1 not taken.
1064960 if(!p_getc(&(tempguy.weapon_initD_label[q][w]),f,keepdata))
14588 {
14589 return qe_invalid;
14590 }
14591 1064960 }
14592 16384 }
14593
14594
14595 2048 }
14596
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if ( guyversion < 39 ) //apply old InitD strings to both
14597 {
14598 30208 al_trace("Populating InitD Label Fields for NPCS\n");
14599
2/2
✓ Branch 0 taken 241664 times.
✓ Branch 1 taken 30208 times.
271872 for ( int32_t q = 0; q < 8; q++ )
14600 {
14601 241664 sprintf(tempguy.initD_label[q],"InitD[%d]",q);
14602 241664 sprintf(tempguy.weapon_initD_label[q],"InitD[%d]",q);
14603 241664 }
14604 30208 }
14605
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
32256 if ( guyversion >= 40 )
14606 {
14607
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_igetw(&(tempguy.weaponscript),f,keepdata))
14608 {
14609 return qe_invalid;
14610 }
14611 2048 }
14612
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if ( guyversion < 40 )
14613 {
14614 30208 tempguy.weaponscript = 0;
14615 30208 }
14616 //eweapon script InitD
14617
2/2
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
32256 if ( guyversion >= 41 )
14618 {
14619
2/2
✓ Branch 0 taken 16384 times.
✓ Branch 1 taken 2048 times.
18432 for ( int32_t q = 0; q < 8; q++ )
14620 {
14621
1/2
✓ Branch 0 taken 16384 times.
✗ Branch 1 not taken.
16384 if(!p_igetl(&(tempguy.weap_initiald[q]),f,keepdata))
14622 {
14623 return qe_invalid;
14624 }
14625 16384 }
14626
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if ( guy_cversion < 4 )
14627 {
14628 if ( tempguy.family == eeKEESE )
14629 {
14630
14631 if ( !tempguy.misc1 )
14632 {
14633 tempguy.misc16 = 120;
14634 tempguy.misc17 = 16;
14635
14636 }
14637 }
14638 if ( tempguy.family == eePEAHAT )
14639 {
14640 tempguy.misc16 = 80;
14641 tempguy.misc17 = 16;
14642 }
14643
14644 if ( tempguy.family == eeGHINI )
14645 {
14646 tempguy.misc16 = 120;
14647 tempguy.misc17 = 10;
14648 }
14649
14650 }
14651 2048 }
14652
14653
14654
14655 //default weapon sprites (quest version < 2.54)
14656 //port over old defaults -Z
14657
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if(guyversion < 32)
14658 {
14659
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 30208 times.
30208 if ( tempguy.wpnsprite <= 0 )
14660 {
14661
16/20
✗ Branch 0 not taken.
✓ Branch 1 taken 1004 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 25109 times.
✓ Branch 4 taken 223 times.
✓ Branch 5 taken 249 times.
✓ Branch 6 taken 739 times.
✓ Branch 7 taken 367 times.
✓ Branch 8 taken 699 times.
✓ Branch 9 taken 59 times.
✓ Branch 10 taken 13 times.
✓ Branch 11 taken 105 times.
✓ Branch 12 taken 13 times.
✓ Branch 13 taken 272 times.
✓ Branch 14 taken 584 times.
✓ Branch 15 taken 79 times.
✓ Branch 16 taken 59 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 634 times.
30208 switch(tempguy.weapon)
14662 {
14663 case wNone:
14664 25109 tempguy.wpnsprite = 0; break;
14665
14666 case wSword:
14667 case wBeam:
14668 case wBrang:
14669 case wBomb:
14670 case wSBomb:
14671 case wLitBomb:
14672 case wLitSBomb:
14673 case wArrow:
14674 case wFire:
14675 case wWhistle:
14676 case wBait:
14677 case wWand:
14678 case wMagic:
14679 case wCatching:
14680 case wWind:
14681 case wRefMagic:
14682 case wRefFireball:
14683 case wRefRock:
14684 case wHammer:
14685 case wHookshot:
14686 case wHSHandle:
14687 case wHSChain:
14688 case wSSparkle:
14689 case wFSparkle:
14690 case wSmack:
14691 case wPhantom:
14692 case wCByrna:
14693 case wRefBeam:
14694 case wStomp:
14695 case lwMax:
14696 case wScript1:
14697 case wScript2:
14698 case wScript3:
14699 case wScript4:
14700 case wScript5:
14701 case wScript6:
14702 case wScript7:
14703 case wScript8:
14704 case wScript9:
14705 case wScript10:
14706 case wIce:
14707 //Cannot use any of these weapons yet.
14708 tempguy.wpnsprite = -1;
14709 break;
14710
14711 case wEnemyWeapons:
14712 1004 case ewFireball: tempguy.wpnsprite = 17; break;
14713
14714 223 case ewArrow: tempguy.wpnsprite = 19; break;
14715 249 case ewBrang: tempguy.wpnsprite = 4; break;
14716 739 case ewSword: tempguy.wpnsprite = 20; break;
14717 367 case ewRock: tempguy.wpnsprite = 18; break;
14718 699 case ewMagic: tempguy.wpnsprite = 21; break;
14719 59 case ewBomb: tempguy.wpnsprite = 78; break;
14720 13 case ewSBomb: tempguy.wpnsprite = 79; break;
14721 105 case ewLitBomb: tempguy.wpnsprite = 76; break;
14722 13 case ewLitSBomb: tempguy.wpnsprite = 77; break;
14723 272 case ewFireTrail: tempguy.wpnsprite = 80; break;
14724 584 case ewFlame: tempguy.wpnsprite = 35; break;
14725 79 case ewWind: tempguy.wpnsprite = 36; break;
14726 59 case ewFlame2: tempguy.wpnsprite = 81; break;
14727 case ewFlame2Trail: tempguy.wpnsprite = 82; break;
14728 case ewIce: tempguy.wpnsprite = 83; break;
14729 634 case ewFireball2: tempguy.wpnsprite = 17; break; //fireball (rising)
14730
14731
14732 default: break; //No assign.
14733 }
14734 30208 }
14735 30208 }
14736
14737 //default weapon fire sound (quest version < 2.54)
14738 //port over old defaults and zero new data. -Z
14739
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if(guyversion < 34)
14740 {
14741
2/2
✓ Branch 0 taken 966656 times.
✓ Branch 1 taken 30208 times.
996864 for ( int32_t q = 0; q < 32; q++ )
14742 {
14743 966656 tempguy.movement[q] = 0;
14744 966656 tempguy.new_weapon[q] = 0;
14745
14746 966656 }
14747
14748 //NPC Script attributes.
14749 30208 tempguy.script = 0; //No scripted enemies existed. -Z
14750
2/2
✓ Branch 0 taken 241664 times.
✓ Branch 1 taken 30208 times.
271872 for ( int32_t q = 0; q < 8; q++ ) tempguy.initD[q] = 0; //Script Data
14751
2/2
✓ Branch 0 taken 60416 times.
✓ Branch 1 taken 30208 times.
90624 for ( int32_t q = 0; q < 2; q++ ) tempguy.initA[q] = 0; //Script Data
14752
14753 30208 tempguy.misc16 = 0;
14754 30208 tempguy.misc17 = 0;
14755 30208 tempguy.misc18 = 0;
14756 30208 tempguy.misc19 = 0;
14757 30208 tempguy.misc20 = 0;
14758 30208 tempguy.misc21 = 0;
14759 30208 tempguy.misc22 = 0;
14760 30208 tempguy.misc23 = 0;
14761 30208 tempguy.misc24 = 0;
14762 30208 tempguy.misc25 = 0;
14763 30208 tempguy.misc26 = 0;
14764 30208 tempguy.misc27 = 0;
14765 30208 tempguy.misc28 = 0;
14766 30208 tempguy.misc29 = 0;
14767 30208 tempguy.misc30 = 0;
14768 30208 tempguy.misc31 = 0;
14769 30208 tempguy.misc32 = 0;
14770
14771 //old default sounds
14772
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 30208 times.
30208 if ( tempguy.firesfx <= 0 )
14773 {
14774
16/20
✗ Branch 0 not taken.
✓ Branch 1 taken 1004 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 25109 times.
✓ Branch 4 taken 223 times.
✓ Branch 5 taken 249 times.
✓ Branch 6 taken 739 times.
✓ Branch 7 taken 367 times.
✓ Branch 8 taken 699 times.
✓ Branch 9 taken 59 times.
✓ Branch 10 taken 13 times.
✓ Branch 11 taken 105 times.
✓ Branch 12 taken 13 times.
✓ Branch 13 taken 272 times.
✓ Branch 14 taken 584 times.
✓ Branch 15 taken 79 times.
✓ Branch 16 taken 59 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 634 times.
30208 switch(tempguy.weapon)
14775 {
14776 case wNone:
14777 25109 tempguy.firesfx = 0; break;
14778
14779 case wSword:
14780 case wBeam:
14781 case wBrang:
14782 case wBomb:
14783 case wSBomb:
14784 case wLitBomb:
14785 case wLitSBomb:
14786 case wArrow:
14787 case wFire:
14788 case wWhistle:
14789 case wBait:
14790 case wWand:
14791 case wMagic:
14792 case wCatching:
14793 case wWind:
14794 case wRefMagic:
14795 case wRefFireball:
14796 case wRefRock:
14797 case wHammer:
14798 case wHookshot:
14799 case wHSHandle:
14800 case wHSChain:
14801 case wSSparkle:
14802 case wFSparkle:
14803 case wSmack:
14804 case wPhantom:
14805 case wCByrna:
14806 case wRefBeam:
14807 case wStomp:
14808 case lwMax:
14809 case wScript1:
14810 case wScript2:
14811 case wScript3:
14812 case wScript4:
14813 case wScript5:
14814 case wScript6:
14815 case wScript7:
14816 case wScript8:
14817 case wScript9:
14818 case wScript10:
14819 case wIce:
14820 //Cannot use any of these weapons yet.
14821 tempguy.firesfx = -1;
14822 break;
14823
14824 case wEnemyWeapons:
14825 1004 case ewFireball: tempguy.firesfx = 40; break;
14826
14827 223 case ewArrow: tempguy.firesfx = 1; break; //Ghost.zh has 0?
14828 249 case ewBrang: tempguy.firesfx = 4; break; //Ghost.zh has 0?
14829 739 case ewSword: tempguy.firesfx = 20; break; //Ghost.zh has 0?
14830 367 case ewRock: tempguy.firesfx = 51; break;
14831 699 case ewMagic: tempguy.firesfx = 32; break;
14832 59 case ewBomb: tempguy.firesfx = 3; break; //Ghost.zh has 0?
14833 13 case ewSBomb: tempguy.firesfx = 3; break; //Ghost.zh has 0?
14834 105 case ewLitBomb: tempguy.firesfx = 21; break; //Ghost.zh has 0?
14835 13 case ewLitSBomb: tempguy.firesfx = 21; break; //Ghost.zh has 0?
14836 272 case ewFireTrail: tempguy.firesfx = 13; break;
14837 584 case ewFlame: tempguy.firesfx = 13; break;
14838 79 case ewWind: tempguy.firesfx = 32; break;
14839 59 case ewFlame2: tempguy.firesfx = 13; break;
14840 case ewFlame2Trail: tempguy.firesfx = 13; break;
14841 case ewIce: tempguy.firesfx = 44; break;
14842 634 case ewFireball2: tempguy.firesfx = 40; break; //fireball (rising)
14843
14844 //what about special attacks (e.g. summoning == 56)
14845 default: break; //No assign.
14846 }
14847 30208 }
14848 30208 }
14849
14850 //Port hardcoded hit sound to the enemy hitsfx defaults for older quests.
14851
4/6
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
✓ Branch 2 taken 2048 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2048 times.
32256 if(Header->zelda_version <= 0x250 || ( Header->zelda_version > 0x250 && guyversion < 35 ))
14852 {
14853
2/2
✓ Branch 0 taken 2433 times.
✓ Branch 1 taken 27775 times.
30208 if ( tempguy.hitsfx == 0 ) tempguy.hitsfx = 11;
14854 30208 }
14855 //Keese and bat halt rates.
14856
3/4
✓ Branch 0 taken 30208 times.
✓ Branch 1 taken 2048 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 30208 times.
32256 if ( guyversion < 42 && guy_cversion < 4 )
14857 {
14858
14859
2/2
✓ Branch 0 taken 29788 times.
✓ Branch 1 taken 420 times.
30208 if ( tempguy.family == eeKEESE )
14860 {
14861
14862
2/2
✓ Branch 0 taken 171 times.
✓ Branch 1 taken 249 times.
420 if ( !tempguy.misc1 )
14863 {
14864 249 tempguy.misc16 = 120;
14865 249 tempguy.misc17 = 16;
14866
14867 249 }
14868 420 }
14869
2/2
✓ Branch 0 taken 30080 times.
✓ Branch 1 taken 128 times.
30208 if ( tempguy.family == eePEAHAT )
14870 {
14871 128 tempguy.misc16 = 80;
14872 128 tempguy.misc17 = 16;
14873 128 }
14874
2/2
✓ Branch 0 taken 30149 times.
✓ Branch 1 taken 59 times.
30208 if ( tempguy.family == eeGHINI )
14875 {
14876 59 tempguy.misc16 = 120;
14877 59 tempguy.misc17 = 10;
14878 59 }
14879
14880
14881 30208 }
14882
14883
14884 //miscellaneous other corrections
14885 //fix the mirror wizzrobe -DD
14886
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 7)
14887 {
14888 if(i == eMWIZ)
14889 {
14890 tempguy.misc2 = 0;
14891 tempguy.misc4 = 1;
14892 }
14893 }
14894
14895
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 8)
14896 {
14897 if(i == eGLEEOK1 || i == eGLEEOK2 || i == eGLEEOK3 || i == eGLEEOK4 || i == eGLEEOK1F || i == eGLEEOK2F || i == eGLEEOK3F || i == eGLEEOK4F)
14898 {
14899 // Some of these are deliberately different to NewDefault/defdata.cpp, by the way. -L
14900 tempguy.misc5 = 4; //neck length in segments
14901 tempguy.misc6 = 8; //neck offset from first body tile
14902 tempguy.misc7 = 40; //offset for each subsequent neck tile from the first neck tile
14903 tempguy.misc8 = 168; //head offset from first body tile
14904 tempguy.misc9 = 228; //flying head offset from first body tile
14905
14906 if(i == eGLEEOK1F || i == eGLEEOK2F || i == eGLEEOK3F || i == eGLEEOK4F)
14907 {
14908 tempguy.misc6 += 10; //neck offset from first body tile
14909 tempguy.misc8 -= 12; //head offset from first body tile
14910 }
14911 }
14912 }
14913
14914
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 10) // December 2007 - Dodongo CSet fix
14915 {
14916 if(get_bit(deprecated_rules,46) && tempguy.family==eeDONGO && tempguy.misc1==0)
14917 tempguy.bosspal = spDIG;
14918 }
14919
14920
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 11) // December 2007 - Spinning Tile fix
14921 {
14922 if(tempguy.family==eeSPINTILE)
14923 {
14924 tempguy.flags |= guy_superman;
14925 tempguy.item_set = 0; // Don't drop items
14926 tempguy.step = 300;
14927 }
14928 }
14929
14930
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 12) // October 2008 - Flashing Bubble, Rope 2, and Ghini 2 fix
14931 {
14932 if(get_bit(deprecated_rules, qr_NOROPE2FLASH_DEP))
14933 {
14934 if(tempguy.family==eeROPE)
14935 {
14936 tempguy.flags2 &= ~guy_flashing;
14937 }
14938 }
14939
14940 if(get_bit(deprecated_rules, qr_NOBUBBLEFLASH_DEP))
14941 {
14942 if(tempguy.family==eeBUBBLE)
14943 {
14944 tempguy.flags2 &= ~guy_flashing;
14945 }
14946 }
14947
14948 if((tempguy.family==eeGHINI)&&(tempguy.misc1))
14949 {
14950 if(get_bit(deprecated_rules, qr_GHINI2BLINK_DEP))
14951 {
14952 tempguy.flags2 |= guy_blinking;
14953 }
14954
14955 if(get_bit(deprecated_rules, qr_PHANTOMGHINI2_DEP))
14956 {
14957 tempguy.flags2 |= guy_transparent;
14958 }
14959 }
14960 }
14961
14962
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 15) // July 2009 - Guy Fire and Fairy fix
14963 {
14964 if(i==gFIRE)
14965 {
14966 tempguy.e_anim = aFLIP;
14967 tempguy.e_frate = 24;
14968 }
14969
14970 if(i==gFAIRY)
14971 {
14972 tempguy.e_anim = a2FRM;
14973 tempguy.e_frate = 16;
14974 }
14975 }
14976
14977
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 16) // November 2009 - Super Enemy Editor part 1
14978 {
14979 if(i==0) Z_message("Updating guys to version 16...\n");
14980
14981 update_guy_1(&tempguy);
14982
14983 if(i==eMPOLSV)
14984 {
14985 tempguy.defense[edefARROW] = edCHINK;
14986 tempguy.defense[edefMAGIC] = ed1HKO;
14987 tempguy.defense[edefREFMAGIC] = ed1HKO;
14988 }
14989 }
14990
14991
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 17) // December 2009
14992 {
14993 if(tempguy.family==eePROJECTILE)
14994 {
14995 tempguy.misc1 = 0;
14996 }
14997 }
14998
14999
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 18) // January 2010
15000 {
15001 bool boss = (tempguy.family == eeAQUA || tempguy.family==eeDONGO || tempguy.family == eeMANHAN || tempguy.family == eeGHOMA || tempguy.family==eeDIG
15002 || tempguy.family == eeGLEEOK || tempguy.family==eePATRA || tempguy.family == eeGANON || tempguy.family==eeMOLD);
15003
15004 tempguy.hitsfx = (boss && tempguy.family != eeMOLD && tempguy.family != eeDONGO && tempguy.family != eeDIG) ? WAV_GASP : 0;
15005 tempguy.deadsfx = (boss && (tempguy.family != eeDIG || tempguy.misc10 == 0)) ? WAV_GASP : WAV_EDEAD;
15006
15007 if(tempguy.family == eeAQUA)
15008 for(int32_t j=0; j<edefLAST; j++) tempguy.defense[j] = default_guys[eRAQUAM].defense[j];
15009 else if(tempguy.family == eeMANHAN)
15010 for(int32_t j=0; j<edefLAST; j++) tempguy.defense[j] = default_guys[eMANHAN].defense[j];
15011 else if(tempguy.family==eePATRA)
15012 for(int32_t j=0; j<edefLAST; j++) tempguy.defense[j] = default_guys[eGLEEOK1].defense[j];
15013 else if(tempguy.family==eeGHOMA)
15014 {
15015 for(int32_t j=0; j<edefLAST; j++)
15016 tempguy.defense[j] = default_guys[eGOHMA1].defense[j];
15017
15018 tempguy.defense[edefARROW] = ((tempguy.misc1==3) ? edCHINKL8 : (tempguy.misc1==2) ? edCHINKL4 : 0);
15019
15020 if(tempguy.misc1==3 && !tempguy.weapon) tempguy.weapon = ewFlame;
15021
15022 tempguy.misc1--;
15023 }
15024 else if(tempguy.family == eeGLEEOK)
15025 {
15026 for(int32_t j=0; j<edefLAST; j++)
15027 tempguy.defense[j] = default_guys[eGLEEOK1].defense[j];
15028
15029 if(tempguy.misc3==1 && !tempguy.weapon) tempguy.weapon = ewFlame;
15030 }
15031 else if(tempguy.family == eeARMOS)
15032 {
15033 tempguy.family=eeWALK;
15034 tempguy.hrate = 0;
15035 tempguy.misc10 = tempguy.misc1;
15036 tempguy.misc1 = tempguy.misc2 = tempguy.misc3 = tempguy.misc4 = tempguy.misc5 = tempguy.misc6 = tempguy.misc7 = tempguy.misc8 = 0;
15037 tempguy.misc9 = e9tARMOS;
15038 }
15039 else if(tempguy.family == eeGHINI && !tempguy.misc1)
15040 {
15041 tempguy.family=eeWALK;
15042 tempguy.hrate = 0;
15043 tempguy.misc1 = tempguy.misc2 = tempguy.misc3 = tempguy.misc4 = tempguy.misc5 = tempguy.misc6 =
15044 tempguy.misc7 = tempguy.misc8 = tempguy.misc9 = tempguy.misc10 = 0;
15045 }
15046
15047 // Spawn animation flags
15048 if(tempguy.family == eeWALK && (tempguy.flags2&cmbflag_armos || tempguy.flags2&cmbflag_ghini))
15049 tempguy.flags |= guy_fadeflicker;
15050 else
15051 tempguy.flags &= 0x0F00000F; // Get rid of the unused flags!
15052 }
15053
15054
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 20) // April 2010
15055 {
15056 if(tempguy.family == eeTRAP)
15057 {
15058 tempguy.misc2 = tempguy.misc10;
15059
15060 if(tempguy.misc10>=1)
15061 {
15062 tempguy.misc1++;
15063 }
15064
15065 tempguy.misc10 = 0;
15066 }
15067
15068 // Bomb Blast fix
15069 if(tempguy.weapon==ewBomb && tempguy.family!=eeROPE && (tempguy.family!=eeWALK || tempguy.misc2 != e2tBOMBCHU))
15070 tempguy.weapon = ewLitBomb;
15071 else if(tempguy.weapon==ewSBomb && tempguy.family!=eeROPE && (tempguy.family!=eeWALK || tempguy.misc2 != e2tBOMBCHU))
15072 tempguy.weapon = ewLitSBomb;
15073 }
15074
15075
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 21) // September 2011
15076 {
15077 if(tempguy.family == eeKEESE || tempguy.family == eeKEESETRIB)
15078 {
15079 if(tempguy.family == eeKEESETRIB)
15080 {
15081 tempguy.family = eeKEESE;
15082 tempguy.misc2 = e2tKEESETRIB;
15083 tempguy.misc1 = 0;
15084 }
15085
15086 tempguy.rate = 2;
15087 tempguy.hrate = 8;
15088 tempguy.homing = 0;
15089 tempguy.step= (tempguy.family == eeKEESE && tempguy.misc1 ? 100:62);
15090 }
15091 else if(tempguy.family == eePEAHAT || tempguy.family==eePATRA)
15092 {
15093 if(tempguy.family == eePEAHAT)
15094 {
15095 tempguy.rate = 4;
15096 tempguy.step = 62;
15097 }
15098 else
15099 tempguy.step = 25;
15100
15101 tempguy.hrate = 8;
15102 tempguy.homing = 0;
15103 }
15104 else if(tempguy.family == eeDIG || tempguy.family == eeMANHAN)
15105 {
15106 if(tempguy.family == eeMANHAN)
15107 tempguy.step=50;
15108
15109 tempguy.hrate = 16;
15110 tempguy.homing = 0;
15111 }
15112 else if(tempguy.family == eeGLEEOK)
15113 {
15114 tempguy.rate = 2;
15115 tempguy.homing = 0;
15116 tempguy.hrate = 9;
15117 tempguy.step=89;
15118 }
15119 else if(tempguy.family == eeGHINI)
15120 {
15121 tempguy.rate = 4;
15122 tempguy.hrate = 12;
15123 tempguy.step=62;
15124 tempguy.homing = 0;
15125 }
15126
15127 // Bigdig random rate fix
15128 if(tempguy.family==eeDIG && tempguy.misc10==1)
15129 {
15130 tempguy.rate = 2;
15131 }
15132 }
15133
15134
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(guyversion < 24) // November 2012
15135 {
15136 if(tempguy.family==eeLANM)
15137 tempguy.misc3 = 1;
15138 else if(tempguy.family==eeMOLD)
15139 tempguy.misc2 = 0;
15140 }
15141
15142
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if(guyversion < 33) //Whistle defence did not exist before this version of 2.54. -Z
15143 {
15144
2/2
✓ Branch 0 taken 532 times.
✓ Branch 1 taken 29676 times.
30208 if(tempguy.family!=eeDIG)
15145 {
15146 29676 tempguy.defense[edefWhistle] = edIGNORE; //Might need to be ignore, universally.
15147 29676 }
15148
15149 30208 }
15150 // does not seem to solve the issue!
15151
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if ( Header->zelda_version <= 0x210 )
15152 {
15153 al_trace("Detected version %d for dodongo patch.\n",Header->zelda_version);
15154 if ( tempguy.family == eeDONGO )
15155 {
15156 tempguy.deadsfx = 15; //In 2.10 and earlier, Dodongos used this as their death sound.
15157 }
15158 }
15159
15160
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if(guyversion >= 42)
15161 {
15162
2/2
✓ Branch 0 taken 1536 times.
✓ Branch 1 taken 512 times.
2048 if(guyversion >= 47)
15163 {
15164
1/2
✓ Branch 0 taken 1536 times.
✗ Branch 1 not taken.
1536 if(!p_igetl(&(tempguy.moveflags),f,keepdata))
15165 {
15166 return qe_invalid;
15167 }
15168 1536 }
15169 else
15170 {
15171 byte fl;
15172
1/2
✓ Branch 0 taken 512 times.
✗ Branch 1 not taken.
512 if(!p_getc(&fl,f,keepdata))
15173 {
15174 return qe_invalid;
15175 }
15176 512 tempguy.moveflags = fl;
15177 }
15178 2048 }
15179 else
15180 {
15181
7/8
✓ Branch 0 taken 50 times.
✓ Branch 1 taken 23890 times.
✓ Branch 2 taken 942 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 385 times.
✓ Branch 5 taken 213 times.
✓ Branch 6 taken 184 times.
✓ Branch 7 taken 4544 times.
30208 switch(tempguy.family)
15182 {
15183 //No gravity; floats over pits
15184 case eeTEK: case eePEAHAT: case eeROCK: case eeTRAP:
15185 case eePROJECTILE: case eeSPINTILE: case eeKEESE: case eeFIRE:
15186 //Special (bosses, etc)
15187 case eeFAIRY: case eeGUY: case eeNONE: case eeZORA:
15188 case eeAQUA: case eeDIG: case eeGHOMA: case eeGANON:
15189 case eePATRA: case eeGLEEOK: case eeMOLD: case eeMANHAN:
15190 23890 tempguy.moveflags = FLAG_CAN_PITWALK;
15191 23890 break;
15192 //No gravity, but falls in pits
15193 case eeLEV:
15194 385 tempguy.moveflags = FLAG_CAN_PITFALL;
15195 385 break;
15196 //Bosses that respect pits
15197 case eeDONGO:
15198 213 tempguy.moveflags = FLAG_OBEYS_GRAV;
15199 213 break;
15200 case eeLANM:
15201 184 tempguy.moveflags = 0;
15202 184 break;
15203 //Gravity, floats over pits
15204 case eeWIZZ: case eeWALLM: case eeGHINI:
15205 942 tempguy.moveflags = FLAG_OBEYS_GRAV | FLAG_CAN_PITWALK;
15206 942 break;
15207 //Gravity and falls in pits
15208 case eeWALK:
15209
4/4
✓ Branch 0 taken 4291 times.
✓ Branch 1 taken 253 times.
✓ Branch 2 taken 216 times.
✓ Branch 3 taken 4075 times.
4544 if (tempguy.misc9==e9tPOLSVOICE||tempguy.misc9==e9tVIRE)
15210 469 break;
15211 [[fallthrough]];
15212 case eeOTHER:
15213 case eeSCRIPT01: case eeSCRIPT02: case eeSCRIPT03: case eeSCRIPT04: case eeSCRIPT05:
15214 case eeSCRIPT06: case eeSCRIPT07: case eeSCRIPT08: case eeSCRIPT09: case eeSCRIPT10:
15215 case eeSCRIPT11: case eeSCRIPT12: case eeSCRIPT13: case eeSCRIPT14: case eeSCRIPT15:
15216 case eeSCRIPT16: case eeSCRIPT17: case eeSCRIPT18: case eeSCRIPT19: case eeSCRIPT20:
15217 case eeFFRIENDLY01: case eeFFRIENDLY02: case eeFFRIENDLY03: case eeFFRIENDLY04: case eeFFRIENDLY05:
15218 case eeFFRIENDLY06: case eeFFRIENDLY07: case eeFFRIENDLY08: case eeFFRIENDLY09: case eeFFRIENDLY10:
15219 4125 tempguy.moveflags = FLAG_OBEYS_GRAV | FLAG_CAN_PITFALL;
15220 4125 }
15221 }
15222
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if(guyversion < 43)
15223 {
15224
2/2
✓ Branch 0 taken 24832 times.
✓ Branch 1 taken 5376 times.
30208 switch(tempguy.family)
15225 {
15226 //No gravity; floats over pits
15227 case eeTEK: case eePEAHAT: case eeROCK: case eeTRAP:
15228 case eePROJECTILE: case eeSPINTILE: case eeKEESE: case eeFIRE:
15229 //Special (bosses, etc)
15230 case eeFAIRY: case eeGUY: case eeNONE: case eeZORA:
15231 case eeAQUA: case eeDIG: case eeGHOMA: case eeGANON:
15232 case eePATRA: case eeGLEEOK: case eeMOLD: case eeMANHAN:
15233 case eeWIZZ: case eeWALLM: case eeGHINI:
15234 //Gravity, floats over pits
15235 24832 tempguy.moveflags |= FLAG_CAN_WATERWALK;
15236 24832 break;
15237 }
15238 30208 }
15239
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if (guyversion < 44)
15240 {
15241
2/2
✓ Branch 0 taken 29911 times.
✓ Branch 1 taken 297 times.
30208 if ( tempguy.family == eeGHOMA )
15242 {
15243 297 tempguy.flags |= guy_fadeinstant;
15244 297 }
15245 30208 }
15246
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if (guyversion > 44)
15247 {
15248
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_getc(&(tempguy.spr_shadow),f,keepdata))
15249 {
15250 return qe_invalid;
15251 }
15252
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_getc(&(tempguy.spr_death),f,keepdata))
15253 {
15254 return qe_invalid;
15255 }
15256
1/2
✓ Branch 0 taken 2048 times.
✗ Branch 1 not taken.
2048 if(!p_getc(&(tempguy.spr_spawn),f,keepdata))
15257 {
15258 return qe_invalid;
15259 }
15260 2048 }
15261 else
15262 {
15263
2/2
✓ Branch 0 taken 30090 times.
✓ Branch 1 taken 118 times.
30208 tempguy.spr_shadow = (tempguy.family==eeROCK && tempguy.misc10==1) ? iwLargeShadow : iwShadow;
15264 30208 tempguy.spr_death = iwDeath;
15265 30208 tempguy.spr_spawn = iwSpawn;
15266 }
15267
15268
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 30208 times.
32256 if(guyversion < 46)
15269 {
15270
4/4
✓ Branch 0 taken 4544 times.
✓ Branch 1 taken 25664 times.
✓ Branch 2 taken 4291 times.
✓ Branch 3 taken 253 times.
30208 if(tempguy.family == eeWALK && tempguy.misc9 == e9tPOLSVOICE)
15271 {
15272 253 tempguy.moveflags |= FLAG_CAN_WATERWALK;
15273 253 }
15274 30208 }
15275
15276
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
32256 if(keepdata)
15277 {
15278 32256 guysbuf[i] = tempguy;
15279 32256 }
15280 32256 }
15281 63 }
15282
15283 63 return 0;
15284 63 }
15285
15286 void update_guy_1(guydata *tempguy) // November 2009
15287 {
15288 bool doesntcount = false;
15289 tempguy->flags &= ~weak_arrow; // Formerly 'weak to arrow' which wasn't implemented
15290
15291 switch(tempguy->family)
15292 {
15293 case 1: //eeWALK
15294 switch(tempguy->misc10)
15295 {
15296 case 0: //Stalfos
15297 if(tempguy->misc1==1) // Fires four projectiles at once
15298 tempguy->misc1=4;
15299
15300 break;
15301
15302 case 1: //Darknut
15303 goto darknuts;
15304 break;
15305 }
15306
15307 tempguy->misc10 = 0;
15308 break;
15309
15310 case 2: //eeSHOOT
15311 tempguy->family = eeWALK;
15312
15313 switch(tempguy->misc10)
15314 {
15315 case 0: //Octorok
15316 if(tempguy->misc1==1||tempguy->misc1==2)
15317 {
15318 tempguy->misc1=e1tFIREOCTO;
15319 tempguy->misc2=e2tFIREOCTO;
15320 }
15321 else tempguy->misc1 = 0;
15322
15323 tempguy->misc6=tempguy->misc4;
15324 tempguy->misc4=tempguy->misc3;
15325 tempguy->misc3=0;
15326 break;
15327
15328 case 1: // Moblin
15329 tempguy->misc1 = 0;
15330 break;
15331
15332 case 2: //Lynel
15333 tempguy->misc6=tempguy->misc1+1;
15334 tempguy->misc1=0;
15335 break;
15336
15337 case 3: //Stalfos 2
15338 if(tempguy->misc1==1) // Fires four projectiles at once
15339 tempguy->misc1=e1t4SHOTS;
15340 else tempguy->misc1 = 0;
15341
15342 break;
15343
15344 case 4: //Darknut 5
15345 darknuts:
15346 tempguy->defense[edefFIRE] = edIGNORE;
15347 tempguy->defense[edefBRANG] = edSTUNORCHINK;
15348 tempguy->defense[edefHOOKSHOT] = 0;
15349 tempguy->defense[edefARROW] = tempguy->defense[edefBYRNA] = tempguy->defense[edefREFROCK] =
15350 tempguy->defense[edefMAGIC] = tempguy->defense[edefSTOMP] = edCHINK;
15351
15352 if(tempguy->misc1==1)
15353 tempguy->misc1=2;
15354 else if(tempguy->misc1==2)
15355 {
15356 tempguy->misc4=tempguy->misc3;
15357 tempguy->misc3=tempguy->misc2;
15358 tempguy->misc2=e2tSPLIT;
15359 tempguy->misc1 = 0;
15360 }
15361 else tempguy->misc1 = 0;
15362
15363 tempguy->flags |= inv_front;
15364
15365 if(get_bit(deprecated_rules,qr_BRKBLSHLDS_DEP))
15366 tempguy->flags |= guy_bkshield;
15367
15368 break;
15369 }
15370
15371 tempguy->misc10 = 0;
15372 break;
15373
15374 /*
15375 case 9: //eeARMOS
15376 tempguy->family = eeWALK;
15377 break;
15378 */
15379 case 11: //eeGEL
15380 case 33: //eeGELTRIB
15381 if(tempguy->family==33)
15382 {
15383 tempguy->misc4 = 1;
15384
15385 if(get_bit(deprecated_rules, qr_OLDTRIBBLES_DEP)) //Old Tribbles
15386 tempguy->misc3 = tempguy->misc2;
15387
15388 tempguy->misc2 = e2tTRIBBLE;
15389 }
15390 else
15391 {
15392 tempguy->misc4 = 0;
15393 tempguy->misc3 = 0;
15394 tempguy->misc2 = 0;
15395 }
15396
15397 tempguy->family = eeWALK;
15398
15399 if(tempguy->misc1)
15400 {
15401 tempguy->misc1=1;
15402 tempguy->weapon = ewFireTrail;
15403 }
15404
15405 break;
15406
15407 case 34: //eeZOLTRIB
15408 case 12: //eeZOL
15409 tempguy->misc4=tempguy->misc3;
15410 tempguy->misc3=tempguy->misc2;
15411 tempguy->family = eeWALK;
15412 tempguy->misc2=e2tSPLITHIT;
15413
15414 if(tempguy->misc1)
15415 {
15416 tempguy->misc1=1;
15417 tempguy->weapon = ewFireTrail;
15418 }
15419
15420 break;
15421
15422 case 13: //eeROPE
15423 tempguy->family = eeWALK;
15424 tempguy->misc9 = e9tROPE;
15425
15426 if(tempguy->misc1)
15427 {
15428 tempguy->misc4 = tempguy->misc3;
15429 tempguy->misc3 = tempguy->misc2;
15430 tempguy->misc2 = e2tBOMBCHU;
15431 }
15432
15433 tempguy->misc1 = 0;
15434 break;
15435
15436 case 14: //eeGORIYA
15437 tempguy->family = eeWALK;
15438
15439 if(tempguy->misc1!=2) tempguy->misc1 = 0;
15440
15441 break;
15442
15443 case 17: //eeBUBBLE
15444 tempguy->family = eeWALK;
15445 tempguy->misc8 = tempguy->misc2;
15446 tempguy->misc7 = tempguy->misc1 + 1;
15447 tempguy->misc1 = tempguy->misc2 = 0;
15448
15449 //fallthrogh
15450 case eeTRAP:
15451 case eeROCK:
15452 doesntcount = true;
15453 break;
15454
15455 case 35: //eeVIRETRIB
15456 case 18: //eeVIRE
15457 tempguy->family = eeWALK;
15458 tempguy->misc4=tempguy->misc3;
15459 tempguy->misc3=tempguy->misc2;
15460 tempguy->misc2=e2tSPLITHIT;
15461 tempguy->misc9=e9tVIRE;
15462 break;
15463
15464 case 19: //eeLIKE
15465 tempguy->family = eeWALK;
15466 tempguy->misc7 = e7tEATITEMS;
15467 tempguy->misc8=95;
15468 break;
15469
15470 case 20: //eePOLSV
15471 tempguy->defense[edefBRANG] = edSTUNORCHINK;
15472 tempguy->defense[edefBOMB] = tempguy->defense[edefSBOMB] = tempguy->defense[edefFIRE] = edIGNORE;
15473 tempguy->defense[edefMAGIC] = tempguy->defense[edefBYRNA] = edCHINK;
15474 tempguy->defense[edefARROW] = ed1HKO;
15475 tempguy->defense[edefHOOKSHOT] = edSTUNONLY;
15476 tempguy->family = eeWALK;
15477 tempguy->misc9 = e9tPOLSVOICE;
15478 tempguy->rate = 4;
15479 tempguy->homing = 32;
15480 tempguy->hrate = 10;
15481 tempguy->grumble = 0;
15482 break;
15483
15484 case eeWIZZ:
15485 if(tempguy->misc4)
15486 {
15487 for(int32_t i=0; i < edefLAST; i++)
15488 tempguy->defense[i] = (i != edefREFBEAM && i != edefREFMAGIC && i != edefQUAKE) ? edIGNORE : 0;
15489 }
15490 else
15491 {
15492 tempguy->defense[edefBRANG] = edSTUNORCHINK;
15493 tempguy->defense[edefMAGIC] = edCHINK;
15494 tempguy->defense[edefHOOKSHOT] = edSTUNONLY;
15495 tempguy->defense[edefARROW] = tempguy->defense[edefFIRE] =
15496 tempguy->defense[edefWAND] = tempguy->defense[edefBYRNA] = edIGNORE;
15497 }
15498
15499 break;
15500
15501 case eePEAHAT:
15502 tempguy->flags &= ~(guy_superman|guy_sbombonly);
15503
15504 if(!(tempguy->flags & guy_bhit))
15505 tempguy->defense[edefBRANG] = edSTUNONLY;
15506
15507 break;
15508
15509 case eeLEV:
15510 tempguy->defense[edefSTOMP] = edCHINK;
15511 break;
15512 }
15513
15514 // Old flags
15515 if(tempguy->flags & guy_superman)
15516 {
15517 for(int32_t i = 0; i < edefLAST; i++)
15518 if(!(i==edefSBOMB && (tempguy->flags & guy_sbombonly)))
15519 tempguy->defense[i] = (i==edefBRANG && tempguy->defense[i] != edIGNORE
15520 && tempguy->family != eeROCK && tempguy->family != eeTRAP
15521 && tempguy->family != eePROJECTILE) ? edSTUNORIGNORE : edIGNORE;
15522 }
15523
15524 tempguy->flags &= ~(guy_superman|guy_sbombonly);
15525
15526 if(doesntcount)
15527 tempguy->flags |= (guy_doesntcount);
15528 }
15529
15530
15531 105808 int32_t readmapscreen_old(PACKFILE *f, zquestheader *Header, mapscr *temp_mapscr, zcmap *temp_map, word version)
15532 {
15533 byte tempbyte, padding;
15534 int32_t extras, secretcombos;
15535 //al_trace("readmapscreen Header->zelda_version: %x\n",Header->zelda_version);
15536
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->valid),f,true))
15537 {
15538 return qe_invalid;
15539 }
15540
15541
15542
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->guy),f,true))
15543 {
15544 return qe_invalid;
15545 }
15546
15547
2/6
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 105808 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<146)))
15548 {
15549 if(!p_getc(&tempbyte,f,true))
15550 {
15551 return qe_invalid;
15552 }
15553
15554 temp_mapscr->str=tempbyte;
15555 }
15556 else
15557 {
15558
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_igetw(&(temp_mapscr->str),f,true))
15559 {
15560 return qe_invalid;
15561 }
15562 }
15563
15564
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->room),f,true))
15565 {
15566 return qe_invalid;
15567 }
15568
15569
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->item),f,true))
15570 {
15571 return qe_invalid;
15572 }
15573
15574
2/6
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 105808 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if(Header->zelda_version < 0x211 || (Header->zelda_version == 0x211 && Header->build < 14))
15575 {
15576 temp_mapscr->hasitem = (temp_mapscr->item != 0) ? 1 : 0;
15577 }
15578 else
15579 {
15580
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->hasitem),f,true))
15581 return qe_invalid;
15582 }
15583
15584
1/4
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
105808 if((Header->zelda_version < 0x192)||
15585
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 ((Header->zelda_version == 0x192)&&(Header->build<154)))
15586 {
15587 if(!p_getc(&tempbyte,f,true))
15588 {
15589 return qe_invalid;
15590 }
15591 }
15592
15593
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->tilewarptype[0]),f,true))
15594 {
15595 return qe_invalid;
15596 }
15597
15598
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(Header->zelda_version < 0x193)
15599 {
15600 if(!p_getc(&tempbyte,f,true))
15601 {
15602 return qe_invalid;
15603 }
15604 }
15605
15606
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15607 {
15608
2/2
✓ Branch 0 taken 317424 times.
✓ Branch 1 taken 105808 times.
423232 for(int32_t i=1; i<4; i++)
15609 {
15610
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 317424 times.
317424 if(!p_getc(&(temp_mapscr->tilewarptype[i]),f,true))
15611 {
15612 return qe_invalid;
15613 }
15614 317424 }
15615 105808 }
15616 else
15617 {
15618 temp_mapscr->tilewarptype[1]=0;
15619 temp_mapscr->tilewarptype[2]=0;
15620 temp_mapscr->tilewarptype[3]=0;
15621 }
15622
15623
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>153)))
15624 {
15625
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_igetw(&(temp_mapscr->door_combo_set),f,true))
15626 {
15627 return qe_invalid;
15628 }
15629 105808 }
15630
15631
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->warpreturnx[0]),f,true))
15632 {
15633 return qe_invalid;
15634 }
15635
15636 105808 temp_mapscr->warpreturnx[1]=0;
15637 105808 temp_mapscr->warpreturnx[2]=0;
15638 105808 temp_mapscr->warpreturnx[3]=0;
15639
15640
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15641 {
15642
2/2
✓ Branch 0 taken 317424 times.
✓ Branch 1 taken 105808 times.
423232 for(int32_t i=1; i<4; i++)
15643 {
15644
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 317424 times.
317424 if(!p_getc(&(temp_mapscr->warpreturnx[i]),f,true))
15645 {
15646 return qe_invalid;
15647 }
15648 317424 }
15649 105808 }
15650
15651
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->warpreturny[0]),f,true))
15652 {
15653 return qe_invalid;
15654 }
15655
15656 105808 temp_mapscr->warpreturny[1]=0;
15657 105808 temp_mapscr->warpreturny[2]=0;
15658 105808 temp_mapscr->warpreturny[3]=0;
15659
15660
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15661 {
15662
2/2
✓ Branch 0 taken 317424 times.
✓ Branch 1 taken 105808 times.
423232 for(int32_t i=1; i<4; i++)
15663 {
15664
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 317424 times.
317424 if(!p_getc(&(temp_mapscr->warpreturny[i]),f,true))
15665 {
15666 return qe_invalid;
15667 }
15668 317424 }
15669
15670
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(version>=18)
15671 {
15672
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_igetw(&temp_mapscr->warpreturnc,f,true))
15673 {
15674 return qe_invalid;
15675 }
15676 105808 }
15677 else
15678 {
15679 byte temp;
15680
15681 if(!p_getc(&temp,f,true))
15682 {
15683 return qe_invalid;
15684 }
15685
15686 temp_mapscr->warpreturnc=temp<<8|temp;
15687 }
15688 105808 }
15689
15690
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->stairx),f,true))
15691
15692 {
15693 return qe_invalid;
15694 }
15695
15696
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->stairy),f,true))
15697 {
15698 return qe_invalid;
15699 }
15700
15701
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->itemx),f,true))
15702 {
15703 return qe_invalid;
15704 }
15705
15706
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->itemy),f,true))
15707 {
15708 return qe_invalid;
15709 }
15710
15711
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(version > 15) // February 2009
15712 {
15713
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_igetw(&(temp_mapscr->color),f,true))
15714 {
15715 return qe_invalid;
15716 }
15717 105808 }
15718 else
15719 {
15720 if(!p_getc(& tempbyte,f,true))
15721 {
15722 return qe_invalid;
15723 }
15724
15725 temp_mapscr->color = (word) tempbyte;
15726 }
15727
15728
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->enemyflags),f,true))
15729 {
15730 return qe_invalid;
15731 }
15732
15733
2/2
✓ Branch 0 taken 423232 times.
✓ Branch 1 taken 105808 times.
529040 for(int32_t k=0; k<4; k++)
15734 {
15735
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 423232 times.
423232 if(!p_getc(&(temp_mapscr->door[k]),f,true))
15736 {
15737 return qe_invalid;
15738
15739 }
15740 423232 }
15741
15742
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(version <= 11)
15743 {
15744 if(!p_getc(&(tempbyte),f,true))
15745 {
15746 return qe_invalid;
15747 }
15748
15749 temp_mapscr->tilewarpdmap[0]=(word)tempbyte;
15750
15751 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15752 {
15753 for(int32_t i=1; i<4; i++)
15754 {
15755 if(!p_getc(&(tempbyte),f,true))
15756 {
15757 return qe_invalid;
15758 }
15759
15760 temp_mapscr->tilewarpdmap[i]=(word)tempbyte;
15761 }
15762 }
15763 else
15764 {
15765 temp_mapscr->tilewarpdmap[1]=0;
15766 temp_mapscr->tilewarpdmap[2]=0;
15767 temp_mapscr->tilewarpdmap[3]=0;
15768 }
15769 }
15770 else
15771 {
15772
2/2
✓ Branch 0 taken 423232 times.
✓ Branch 1 taken 105808 times.
529040 for(int32_t i=0; i<4; i++)
15773 {
15774
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 423232 times.
423232 if(!p_igetw(&(temp_mapscr->tilewarpdmap[i]),f,true))
15775 {
15776 return qe_invalid;
15777 }
15778 423232 }
15779 }
15780
15781
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->tilewarpscr[0]),f,true))
15782 {
15783 return qe_invalid;
15784 }
15785
15786
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15787 {
15788
2/2
✓ Branch 0 taken 317424 times.
✓ Branch 1 taken 105808 times.
423232 for(int32_t i=1; i<4; i++)
15789 {
15790
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 317424 times.
317424 if(!p_getc(&(temp_mapscr->tilewarpscr[i]),f,true))
15791 {
15792 return qe_invalid;
15793 }
15794 317424 }
15795 105808 }
15796 else
15797 {
15798 temp_mapscr->tilewarpscr[1]=0;
15799 temp_mapscr->tilewarpscr[2]=0;
15800 temp_mapscr->tilewarpscr[3]=0;
15801 }
15802
15803
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(version >= 15)
15804 {
15805
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->tilewarpoverlayflags),f,true))
15806 {
15807 return qe_invalid;
15808 }
15809 105808 }
15810 else
15811 {
15812 temp_mapscr->tilewarpoverlayflags=0;
15813 }
15814
15815
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->exitdir),f,true))
15816 {
15817 return qe_invalid;
15818 }
15819
15820
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(Header->zelda_version < 0x193)
15821 {
15822 if(!p_getc(&tempbyte,f,true))
15823 {
15824 return qe_invalid;
15825 }
15826
15827 }
15828
15829
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version == 0x192)&&(Header->build>145)&&(Header->build<154))
15830 {
15831 if(!p_getc(&padding,f,true))
15832 {
15833 return qe_invalid;
15834 }
15835 }
15836
15837
2/2
✓ Branch 0 taken 1058080 times.
✓ Branch 1 taken 105808 times.
1163888 for(int32_t k=0; k<10; k++)
15838 {
15839 /*
15840 if (!temp_mapscr->enemy[k])
15841 {
15842 continue;
15843 }
15844 */
15845
2/6
✓ Branch 0 taken 1058080 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1058080 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
1058080 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<10)))
15846 {
15847 if(!p_getc(&tempbyte,f,true))
15848 {
15849 return qe_invalid;
15850 }
15851
15852 temp_mapscr->enemy[k]=tempbyte;
15853 }
15854 else
15855 {
15856
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1058080 times.
1058080 if(!p_igetw(&(temp_mapscr->enemy[k]),f,true))
15857 {
15858 return qe_invalid;
15859 }
15860 }
15861
15862
2/6
✓ Branch 0 taken 1058080 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1058080 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
1058080 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<108)))
15863 {
15864 //using enumerations here is dangerous
15865 //very easy to break old quests -DD
15866 if(temp_mapscr->enemy[k]>=57) //old eGOHMA1
15867 {
15868 temp_mapscr->enemy[k]+=5;
15869 }
15870 else if(temp_mapscr->enemy[k]>=52) //old eGLEEOK2
15871 {
15872 temp_mapscr->enemy[k]+=1;
15873 }
15874 }
15875
15876
1/2
✓ Branch 0 taken 1058080 times.
✗ Branch 1 not taken.
1058080 if(version < 9)
15877 {
15878 if(temp_mapscr->enemy[k]>0)
15879 {
15880 temp_mapscr->enemy[k]+=10;
15881 }
15882 }
15883 //don't read in any invalid data
15884
1/2
✓ Branch 0 taken 1058080 times.
✗ Branch 1 not taken.
1058080 if ( ((unsigned)temp_mapscr->enemy[k]) > MAXGUYS )
15885 {
15886 al_trace("Tried to read an invalid enemy ID (%d) for tmpscr->enemy[%d]. This has been cleared to 0.\n", temp_mapscr->enemy[k], k);
15887 temp_mapscr->enemy[k] = 0;
15888 }
15889 1058080 }
15890
15891
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->pattern),f,true))
15892 {
15893 return qe_invalid;
15894 }
15895
15896
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->sidewarptype[0]),f,true))
15897 {
15898 return qe_invalid;
15899 }
15900
15901
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15902 {
15903
2/2
✓ Branch 0 taken 317424 times.
✓ Branch 1 taken 105808 times.
423232 for(int32_t i=1; i<4; i++)
15904 {
15905
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 317424 times.
317424 if(!p_getc(&(temp_mapscr->sidewarptype[i]),f,true))
15906 {
15907 return qe_invalid;
15908 }
15909 317424 }
15910 105808 }
15911 else
15912 {
15913 temp_mapscr->sidewarptype[1]=0;
15914 temp_mapscr->sidewarptype[2]=0;
15915 temp_mapscr->sidewarptype[3]=0;
15916 }
15917
15918
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(version >= 15)
15919 {
15920
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->sidewarpoverlayflags),f,true))
15921 {
15922 return qe_invalid;
15923 }
15924 105808 }
15925 else
15926 {
15927 temp_mapscr->sidewarpoverlayflags=0;
15928 }
15929
15930
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->warparrivalx),f,true))
15931 {
15932 return qe_invalid;
15933 }
15934
15935
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->warparrivaly),f,true))
15936 {
15937 return qe_invalid;
15938 }
15939
15940
2/2
✓ Branch 0 taken 423232 times.
✓ Branch 1 taken 105808 times.
529040 for(int32_t k=0; k<4; k++)
15941 {
15942
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 423232 times.
423232 if(!p_getc(&(temp_mapscr->path[k]),f,true))
15943 {
15944 return qe_invalid;
15945 }
15946 423232 }
15947
15948
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->sidewarpscr[0]),f,true))
15949 {
15950 return qe_invalid;
15951 }
15952
15953
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15954 {
15955
2/2
✓ Branch 0 taken 105808 times.
✓ Branch 1 taken 317424 times.
423232 for(int32_t i=1; i<4; i++)
15956 {
15957
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 317424 times.
317424 if(!p_getc(&(temp_mapscr->sidewarpscr[i]),f,true))
15958 {
15959 return qe_invalid;
15960 }
15961 317424 }
15962 105808 }
15963 else
15964 {
15965 temp_mapscr->sidewarpscr[1]=0;
15966 temp_mapscr->sidewarpscr[2]=0;
15967 temp_mapscr->sidewarpscr[3]=0;
15968 }
15969
15970
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(version <= 11)
15971 {
15972 if(!p_getc(&(tempbyte),f,true))
15973 {
15974 return qe_invalid;
15975 }
15976
15977 temp_mapscr->sidewarpdmap[0]=(word)tempbyte;
15978
15979 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
15980 {
15981 for(int32_t i=1; i<4; i++)
15982 {
15983 if(!p_getc(&(tempbyte),f,true))
15984 {
15985 return qe_invalid;
15986 }
15987
15988 temp_mapscr->sidewarpdmap[i]=(word)tempbyte;
15989 }
15990 }
15991 else
15992 {
15993 temp_mapscr->sidewarpdmap[1]=0;
15994 temp_mapscr->sidewarpdmap[2]=0;
15995 temp_mapscr->sidewarpdmap[3]=0;
15996 }
15997 }
15998 else
15999 {
16000
2/2
✓ Branch 0 taken 423232 times.
✓ Branch 1 taken 105808 times.
529040 for(int32_t i=0; i<4; i++)
16001 {
16002
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 423232 times.
423232 if(!p_igetw(&(temp_mapscr->sidewarpdmap[i]),f,true))
16003 {
16004 return qe_invalid;
16005 }
16006 423232 }
16007 }
16008
16009
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
16010 {
16011
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->sidewarpindex),f,true))
16012 {
16013 return qe_invalid;
16014 }
16015 105808 }
16016 else temp_mapscr->sidewarpindex = 0;
16017
16018
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_igetw(&(temp_mapscr->undercombo),f,true))
16019 {
16020 return qe_invalid;
16021 }
16022
16023
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(Header->zelda_version < 0x193)
16024 {
16025 if(!p_getc(&(temp_mapscr->old_cpage),f,true))
16026 {
16027 return qe_invalid;
16028 }
16029 }
16030
16031
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->undercset),f,true)) //recalculated for older quests
16032 {
16033 return qe_invalid;
16034 }
16035
16036
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_igetw(&(temp_mapscr->catchall),f,true))
16037 {
16038 return qe_invalid;
16039 }
16040
16041
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->flags),f,true))
16042 {
16043 return qe_invalid;
16044 }
16045
16046
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->flags2),f,true))
16047 {
16048 return qe_invalid;
16049 }
16050
16051
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->flags3),f,true))
16052 {
16053 return qe_invalid;
16054 }
16055
16056
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>1)))
16057 //if (version>2)
16058 {
16059
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->flags4),f,true))
16060 {
16061 return qe_invalid;
16062 }
16063 105808 }
16064
16065
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>7)))
16066 {
16067
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->flags5),f,true))
16068 {
16069 return qe_invalid;
16070 }
16071
16072
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_igetw(&(temp_mapscr->noreset),f,true))
16073 {
16074 return qe_invalid;
16075 }
16076
16077
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_igetw(&(temp_mapscr->nocarry),f,true))
16078 {
16079 return qe_invalid;
16080 }
16081
16082
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(temp_mapscr->flags5&32)
16083 {
16084 temp_mapscr->flags5 &= ~32;
16085 temp_mapscr->noreset |= 48;
16086 }
16087
16088
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(version<8)
16089 {
16090 if(temp_mapscr->noreset&1)
16091 {
16092 temp_mapscr->noreset|=8192;
16093 }
16094
16095 if(temp_mapscr->nocarry&1)
16096 {
16097 temp_mapscr->nocarry|=8192;
16098 temp_mapscr->nocarry&=~1;
16099 }
16100 }
16101 105808 }
16102 else
16103 {
16104 temp_mapscr->flags5 = 0;
16105 temp_mapscr->noreset = 0;
16106 temp_mapscr->nocarry = 0;
16107 }
16108
16109
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>9)))
16110 {
16111
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->flags6),f,true))
16112 {
16113 return qe_invalid;
16114 }
16115 105808 }
16116
16117
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(version>5)
16118 {
16119
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->flags7),f,true))
16120 {
16121 return qe_invalid;
16122 }
16123
16124
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->flags8),f,true))
16125 {
16126 return qe_invalid;
16127 }
16128
16129
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->flags9),f,true))
16130 {
16131 return qe_invalid;
16132 }
16133
16134
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->flags10),f,true))
16135 {
16136 return qe_invalid;
16137 }
16138
16139
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->csensitive),f,true))
16140 {
16141 return qe_invalid;
16142 }
16143 105808 }
16144 else
16145 {
16146 temp_mapscr->csensitive=1;
16147 }
16148
16149
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(version<14) // August 2007: screen SFX added
16150 {
16151 if(temp_mapscr->flags&8) //fROAR
16152 {
16153 temp_mapscr->bosssfx=
16154 (temp_mapscr->flags3&2) ? WAV_DODONGO : // fDODONGO
16155 (temp_mapscr->flags2&32) ? WAV_VADER : // fVADER
16156 WAV_ROAR;
16157 }
16158
16159 if(temp_mapscr->flags&128) //fSEA
16160 {
16161 temp_mapscr->oceansfx=WAV_SEA;
16162 }
16163
16164 if(!(temp_mapscr->flags3&64)) //fNOSECRETSOUND
16165 {
16166 temp_mapscr->secretsfx=WAV_SECRET;
16167 }
16168
16169 temp_mapscr->flags3 &= ~66; //64|2
16170 temp_mapscr->flags2 &= ~32;
16171 temp_mapscr->flags &= ~136; // 128|8
16172 }
16173 else
16174 {
16175
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->oceansfx),f,true))
16176 {
16177 return qe_invalid;
16178 }
16179
16180
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->bosssfx),f,true))
16181 {
16182 return qe_invalid;
16183 }
16184
16185
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->secretsfx),f,true))
16186 {
16187 return qe_invalid;
16188 }
16189 }
16190
16191
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(version<15) // October 2007: another SFX
16192 {
16193 temp_mapscr->holdupsfx=WAV_PICKUP;
16194 }
16195 else
16196 {
16197
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->holdupsfx),f,true))
16198 {
16199 return qe_invalid;
16200 }
16201 }
16202
16203
16204
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>97)))
16205 {
16206
2/2
✓ Branch 0 taken 634848 times.
✓ Branch 1 taken 105808 times.
740656 for(int32_t k=0; k<6; k++)
16207 {
16208
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 634848 times.
634848 if(!p_getc(&(temp_mapscr->layermap[k]),f,true))
16209 {
16210 return qe_invalid;
16211 }
16212 634848 }
16213
16214
2/2
✓ Branch 0 taken 105808 times.
✓ Branch 1 taken 634848 times.
740656 for(int32_t k=0; k<6; k++)
16215 {
16216
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 634848 times.
634848 if(!p_getc(&(temp_mapscr->layerscreen[k]),f,true))
16217 {
16218 return qe_invalid;
16219 }
16220 634848 }
16221 105808 }
16222 else if((Header->zelda_version == 0x192)&&(Header->build>23)&&(Header->build<98))
16223 {
16224 if(!p_getc(&(temp_mapscr->layermap[2]),f,true))
16225 {
16226 return qe_invalid;
16227 }
16228
16229 if(!p_getc(&(temp_mapscr->layerscreen[2]),f,true))
16230 {
16231 return qe_invalid;
16232 }
16233
16234 if(!p_getc(&(temp_mapscr->layermap[4]),f,true))
16235 {
16236 return qe_invalid;
16237 }
16238
16239 if(!p_getc(&(temp_mapscr->layerscreen[4]),f,true))
16240
16241 {
16242 return qe_invalid;
16243 }
16244 }
16245
16246
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
105808 if((Header->zelda_version == 0x192)&&(Header->build>149))
16247 {
16248 for(int32_t k=0; k<6; k++)
16249 {
16250 if(!p_getc(&tempbyte,f,true)) //layerxsize
16251 {
16252 return qe_invalid;
16253 }
16254 }
16255
16256 for(int32_t k=0; k<6; k++)
16257 {
16258 if(!p_getc(&tempbyte,f,true)) //layerxspeed
16259 {
16260 return qe_invalid;
16261 }
16262 }
16263
16264 for(int32_t k=0; k<6; k++)
16265 {
16266 if(!p_getc(&tempbyte,f,true)) //layerxdelay
16267 {
16268 return qe_invalid;
16269 }
16270 }
16271
16272 for(int32_t k=0; k<6; k++)
16273 {
16274 if(!p_getc(&tempbyte,f,true)) //layerysize
16275 {
16276 return qe_invalid;
16277 }
16278 }
16279
16280 for(int32_t k=0; k<6; k++)
16281 {
16282 if(!p_getc(&tempbyte,f,true)) //layeryspeed
16283 {
16284 return qe_invalid;
16285 }
16286 }
16287
16288 for(int32_t k=0; k<6; k++)
16289 {
16290 if(!p_getc(&tempbyte,f,true)) //layerydelay
16291 {
16292 return qe_invalid;
16293 }
16294 }
16295 }
16296
16297
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>149)))
16298 {
16299
2/2
✓ Branch 0 taken 634848 times.
✓ Branch 1 taken 105808 times.
740656 for(int32_t k=0; k<6; k++)
16300 {
16301
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 634848 times.
634848 if(!p_getc(&(temp_mapscr->layeropacity[k]),f,true))
16302 {
16303 return qe_invalid;
16304 }
16305 634848 }
16306 105808 }
16307
16308
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>153)))
16309 {
16310
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
105808 if((Header->zelda_version == 0x192)&&(Header->build>153))
16311 {
16312 if(!p_getc(&padding,f,true))
16313 {
16314 return qe_invalid;
16315 }
16316 }
16317
16318
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_igetw(&(temp_mapscr->timedwarptics),f,true))
16319 {
16320 return qe_invalid;
16321 }
16322 105808 }
16323
16324
2/6
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 105808 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<24)))
16325 {
16326 extras=15;
16327 }
16328
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
105808 else if(((Header->zelda_version == 0x192)&&(Header->build<98)))
16329 {
16330 extras=11;
16331 }
16332
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
105808 else if((Header->zelda_version == 0x192)&&(Header->build<150))
16333 {
16334 extras=32;
16335 }
16336
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
105808 else if((Header->zelda_version == 0x192)&&(Header->build<154))
16337 {
16338 extras=64;
16339 }
16340
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 else if(Header->zelda_version < 0x193)
16341 {
16342 extras=62;
16343 }
16344 else
16345
16346 {
16347 105808 extras=0;
16348 }
16349
16350
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 for(int32_t k=0; k<extras; k++)
16351 {
16352 if(!p_getc(&tempbyte,f,true)) //extra[k]
16353 {
16354 return qe_invalid;
16355 }
16356 }
16357
16358
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x211)||((Header->zelda_version == 0x211)&&(Header->build>2)))
16359 //if (version>3)
16360 {
16361
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_getc(&(temp_mapscr->nextmap),f,true))
16362 {
16363 return qe_invalid;
16364 }
16365
16366
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->nextscr),f,true))
16367 {
16368 return qe_invalid;
16369 }
16370 105808 }
16371 else
16372 {
16373 temp_mapscr->nextmap=0;
16374 temp_mapscr->nextscr=0;
16375 }
16376
16377
2/6
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 105808 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<137)))
16378 {
16379 secretcombos=20;
16380 }
16381
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
105808 else if((Header->zelda_version == 0x192)&&(Header->build<154))
16382 {
16383 secretcombos=256;
16384 }
16385 else
16386 {
16387 105808 secretcombos=128;
16388 }
16389
16390
2/6
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 105808 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<154)))
16391 {
16392 for(int32_t k=0; k<secretcombos; k++)
16393 {
16394 if(!p_getc(&tempbyte,f,true))
16395 {
16396 return qe_invalid;
16397 }
16398
16399 if(k<128)
16400 {
16401 temp_mapscr->secretcombo[k]=tempbyte;
16402 }
16403 }
16404 }
16405 else
16406 {
16407
2/2
✓ Branch 0 taken 13543424 times.
✓ Branch 1 taken 105808 times.
13649232 for(int32_t k=0; k<128; k++)
16408 {
16409
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 13543424 times.
13543424 if(!p_igetw(&(temp_mapscr->secretcombo[k]),f,true))
16410 {
16411 return qe_invalid;
16412 }
16413
16414 13543424 }
16415 }
16416
16417
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>153)))
16418 {
16419
2/2
✓ Branch 0 taken 13543424 times.
✓ Branch 1 taken 105808 times.
13649232 for(int32_t k=0; k<128; k++)
16420 {
16421
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 13543424 times.
13543424 if(!p_getc(&(temp_mapscr->secretcset[k]),f,true))
16422 {
16423 return qe_invalid;
16424 }
16425 13543424 }
16426
16427
2/2
✓ Branch 0 taken 13543424 times.
✓ Branch 1 taken 105808 times.
13649232 for(int32_t k=0; k<128; k++)
16428 {
16429
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 13543424 times.
13543424 if(!p_getc(&(temp_mapscr->secretflag[k]),f,true))
16430 {
16431 return qe_invalid;
16432 }
16433 13543424 }
16434 105808 }
16435
16436
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version == 0x192)&&(Header->build>97)&&(Header->build<154))
16437 {
16438 if(!p_getc(&padding,f,true))
16439 {
16440 return qe_invalid;
16441 }
16442 }
16443
16444 105808 const int32_t _mapsSize = (temp_map->tileWidth*temp_map->tileHeight);
16445
16446
2/2
✓ Branch 0 taken 18622208 times.
✓ Branch 1 taken 105808 times.
18728016 for(int32_t k=0; k<(temp_map->tileWidth*temp_map->tileHeight); k++)
16447 {
16448
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 18622208 times.
18622208 if(!p_igetw(&(temp_mapscr->data[k]),f,true))
16449 {
16450 return qe_invalid;
16451 }
16452 18622208 }
16453
16454
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version == 0x192)&&(Header->build>20)&&(Header->build<24))
16455 {
16456 if(!p_getc(&padding,f,true))
16457 {
16458 return qe_invalid;
16459 }
16460
16461 if(!p_getc(&padding,f,true))
16462 {
16463 return qe_invalid;
16464 }
16465 }
16466
16467
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>20)))
16468 {
16469
2/2
✓ Branch 0 taken 18622208 times.
✓ Branch 1 taken 105808 times.
18728016 for(int32_t k=0; k<(temp_map->tileWidth*temp_map->tileHeight); k++)
16470 {
16471
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 18622208 times.
18622208 if(!p_getc(&(temp_mapscr->sflag[k]),f,true))
16472 {
16473 return qe_invalid;
16474 }
16475
16476
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 18622208 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
18622208 if((Header->zelda_version == 0x192)&&(Header->build<24))
16477 {
16478 if(!p_getc(&tempbyte,f,true))
16479 {
16480 return qe_invalid;
16481 }
16482
16483 if(!p_getc(&tempbyte,f,true))
16484 {
16485 return qe_invalid;
16486 }
16487
16488 if(!p_getc(&tempbyte,f,true))
16489 {
16490 return qe_invalid;
16491 }
16492 }
16493 18622208 }
16494 105808 }
16495
16496
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>97)))
16497 {
16498
2/2
✓ Branch 0 taken 105808 times.
✓ Branch 1 taken 18622208 times.
18728016 for(int32_t k=0; k<(temp_map->tileWidth*temp_map->tileHeight); k++)
16499 {
16500
16501
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 18622208 times.
18622208 if(!p_getc(&(temp_mapscr->cset[k]),f,true))
16502 {
16503 return qe_invalid;
16504 }
16505 18622208 }
16506 105808 }
16507
16508
2/6
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 105808 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<154)))
16509 {
16510 temp_mapscr->undercset=(temp_mapscr->undercombo>>8)&7;
16511 temp_mapscr->undercombo=(temp_mapscr->undercombo&0xFF)+(temp_mapscr->old_cpage<<8);
16512 }
16513
16514
2/6
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 105808 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<137)))
16515 {
16516 temp_mapscr->secretcombo[sSBOMB]=temp_mapscr->secretcombo[sBOMB];
16517 temp_mapscr->secretcombo[sRCANDLE]=temp_mapscr->secretcombo[sBCANDLE];
16518 temp_mapscr->secretcombo[sWANDFIRE]=temp_mapscr->secretcombo[sBCANDLE];
16519 temp_mapscr->secretcombo[sDINSFIRE]=temp_mapscr->secretcombo[sBCANDLE];
16520 temp_mapscr->secretcombo[sSARROW]=temp_mapscr->secretcombo[sARROW];
16521 temp_mapscr->secretcombo[sGARROW]=temp_mapscr->secretcombo[sARROW];
16522 }
16523
16524
2/6
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 105808 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
105808 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<154)))
16525 {
16526 for(int32_t k=0; k<(temp_map->tileWidth*temp_map->tileHeight); k++)
16527 {
16528 if((Header->zelda_version == 0x192)&&(Header->build>149))
16529 {
16530 if((Header->zelda_version == 0x192)&&(Header->build!=153))
16531 {
16532 temp_mapscr->cset[k]=((temp_mapscr->data[k]>>8)&7);
16533 }
16534 }
16535 else
16536 {
16537 if((Header->zelda_version < 0x192)||
16538 ((Header->zelda_version == 0x192)&&(Header->build<21)))
16539 {
16540 temp_mapscr->sflag[k]=(temp_mapscr->data[k]>>11);
16541 }
16542
16543 temp_mapscr->cset[k]=((temp_mapscr->data[k]>>8)&7);
16544 }
16545
16546 temp_mapscr->data[k]=(temp_mapscr->data[k]&0xFF)+(temp_mapscr->old_cpage<<8);
16547 }
16548 }
16549
16550 /*if(version>12)
16551 {
16552 if(!p_getc(&(temp_mapscr->scrWidth),f,true))
16553 {
16554 return qe_invalid;
16555 }
16556 if(!p_getc(&(temp_mapscr->scrHeight),f,true))
16557 {
16558 return qe_invalid;
16559 }
16560 }*/
16561
16562
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(version>4)
16563 {
16564
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_igetw(&(temp_mapscr->screen_midi),f,true))
16565 {
16566 return qe_invalid;
16567 }
16568 105808 }
16569 else
16570 {
16571 temp_mapscr->screen_midi = -1;
16572 }
16573
16574
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(version>=17)
16575 {
16576
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(!p_getc(&(temp_mapscr->lens_layer),f,true))
16577 {
16578 return qe_invalid;
16579 }
16580 105808 }
16581 else
16582 {
16583 temp_mapscr->lens_layer = llNORMAL;
16584 }
16585
16586
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(version>6)
16587 {
16588 dword bits;
16589
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 105808 times.
105808 if(!p_igetl(&bits,f,true))
16590 {
16591 return qe_invalid;
16592 }
16593
16594 int32_t m;
16595 float tempfloat;
16596 word tempw;
16597
16598
2/2
✓ Branch 0 taken 105808 times.
✓ Branch 1 taken 3385856 times.
3491664 for(m=0; m<32; m++)
16599 {
16600 3385856 ffcdata& tempffc = temp_mapscr->ffcs[m];
16601 3385856 tempffc.clear();
16602
2/2
✓ Branch 0 taken 3376477 times.
✓ Branch 1 taken 9379 times.
3385856 if((bits>>m)&1)
16603 {
16604
1/2
✓ Branch 0 taken 9379 times.
✗ Branch 1 not taken.
9379 if(!p_igetw(&tempw,f,true))
16605 {
16606 return qe_invalid;
16607 }
16608 9379 tempffc.setData(tempw);
16609
16610
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_getc(&(tempffc.cset),f,true))
16611 {
16612 return qe_invalid;
16613 }
16614
16615
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetw(&(tempffc.delay),f,true))
16616 {
16617 return qe_invalid;
16618 }
16619
16620
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(version < 9)
16621 {
16622 if(!p_igetf(&tempfloat,f,true))
16623 {
16624 return qe_invalid;
16625 }
16626
16627 tempffc.x=zslongToFix(int32_t(tempfloat*10000));
16628
16629 if(!p_igetf(&tempfloat,f,true))
16630 {
16631 return qe_invalid;
16632 }
16633
16634 tempffc.y=zslongToFix(int32_t(tempfloat*10000));
16635
16636 if(!p_igetf(&tempfloat,f,true))
16637 {
16638 return qe_invalid;
16639 }
16640
16641 tempffc.vx=zslongToFix(int32_t(tempfloat*10000));
16642
16643 if(!p_igetf(&tempfloat,f,true))
16644 {
16645 return qe_invalid;
16646 }
16647
16648 tempffc.vy=zslongToFix(int32_t(tempfloat*10000));
16649
16650 if(!p_igetf(&tempfloat,f,true))
16651 {
16652 return qe_invalid;
16653 }
16654
16655 tempffc.ax=zslongToFix(int32_t(tempfloat*10000));
16656
16657 if(!p_igetf(&tempfloat,f,true))
16658 {
16659 return qe_invalid;
16660 }
16661
16662 tempffc.ay=zslongToFix(int32_t(tempfloat*10000));
16663 }
16664 else
16665 {
16666
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetzf(&(tempffc.x),f,true))
16667 {
16668 return qe_invalid;
16669 }
16670
16671
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetzf(&(tempffc.y),f,true))
16672 {
16673 return qe_invalid;
16674 }
16675
16676
1/2
✓ Branch 0 taken 9379 times.
✗ Branch 1 not taken.
9379 if(!p_igetzf(&(tempffc.vx),f,true))
16677 {
16678 return qe_invalid;
16679 }
16680
16681
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetzf(&(tempffc.vy),f,true))
16682 {
16683 return qe_invalid;
16684 }
16685
16686
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetzf(&(tempffc.ax),f,true))
16687 {
16688 return qe_invalid;
16689 }
16690
16691
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetzf(&(tempffc.ay),f,true))
16692 {
16693 return qe_invalid;
16694 }
16695 }
16696
16697
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_getc(&(tempffc.link),f,true))
16698 {
16699 return qe_invalid;
16700 }
16701
16702
1/2
✓ Branch 0 taken 9379 times.
✗ Branch 1 not taken.
9379 if(version>7)
16703 {
16704
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_getc(&tempbyte,f,true))
16705 {
16706 return qe_invalid;
16707 }
16708
16709 9379 tempffc.hxsz = (tempbyte&0x3F)+1;
16710 9379 tempffc.txsz = (tempbyte>>6)+1;
16711
16712
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_getc(&tempbyte,f,true))
16713 {
16714 return qe_invalid;
16715 }
16716
16717 9379 tempffc.hysz = (tempbyte&0x3F)+1;
16718 9379 tempffc.tysz = (tempbyte>>6)+1;
16719
16720
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetl(&(tempffc.flags),f,true))
16721 {
16722 return qe_invalid;
16723 }
16724 9379 }
16725 else
16726 {
16727 tempffc.hxsz=16;
16728 tempffc.hysz=16;
16729 tempffc.txsz=1;
16730 tempffc.tysz=1;
16731 tempffc.flags=0;
16732 }
16733
16734 9379 tempffc.updateSolid();
16735
16736
16737
4/6
✓ Branch 0 taken 9379 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 7415 times.
✓ Branch 3 taken 1964 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 7415 times.
9379 if(Header->zelda_version == 0x211 || (Header->zelda_version == 0x250 && Header->build<20))
16738 {
16739 tempffc.flags|=ffIGNOREHOLDUP;
16740 }
16741
16742
1/2
✓ Branch 0 taken 9379 times.
✗ Branch 1 not taken.
9379 if(version>9)
16743 {
16744
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetw(&(tempffc.script),f,true))
16745 {
16746 return qe_invalid;
16747 }
16748 9379 }
16749 else
16750 {
16751 tempffc.script=0;
16752 }
16753
16754
1/2
✓ Branch 0 taken 9379 times.
✗ Branch 1 not taken.
9379 if(version>10)
16755 {
16756
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetl(&(tempffc.initd[0]),f,true))
16757 {
16758 return qe_invalid;
16759 }
16760
16761
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetl(&(tempffc.initd[1]),f,true))
16762 {
16763 return qe_invalid;
16764 }
16765
16766
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetl(&(tempffc.initd[2]),f,true))
16767 {
16768 return qe_invalid;
16769 }
16770
16771
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetl(&(tempffc.initd[3]),f,true))
16772 {
16773 return qe_invalid;
16774 }
16775
16776
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetl(&(tempffc.initd[4]),f,true))
16777 {
16778 return qe_invalid;
16779 }
16780
16781
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetl(&(tempffc.initd[5]),f,true))
16782 {
16783 return qe_invalid;
16784 }
16785
16786
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetl(&(tempffc.initd[6]),f,true))
16787 {
16788 return qe_invalid;
16789 }
16790
16791
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_igetl(&(tempffc.initd[7]),f,true))
16792 {
16793 return qe_invalid;
16794 }
16795
16796
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_getc(&(tempbyte),f,true))
16797 {
16798 return qe_invalid;
16799 }
16800
16801 9379 tempffc.inita[0]=tempbyte*10000;
16802
16803
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9379 times.
9379 if(!p_getc(&(tempbyte),f,true))
16804 {
16805 return qe_invalid;
16806 }
16807
16808 9379 tempffc.inita[1]=tempbyte*10000;
16809 9379 }
16810 else
16811 {
16812 tempffc.inita[0] = 10000;
16813 tempffc.inita[1] = 10000;
16814 }
16815
16816 9379 tempffc.initialized = false;
16817
16818
1/2
✓ Branch 0 taken 9379 times.
✗ Branch 1 not taken.
9379 if(version <= 11)
16819 {
16820 fixffcs=true;
16821 }
16822 9379 }
16823 3385856 }
16824
16825 105808 }
16826
16827 //add in the new whistle flags
16828
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(version<13)
16829 {
16830 if(temp_mapscr->flags & fWHISTLE)
16831 {
16832 temp_mapscr->flags7 |= (fWHISTLEPAL | fWHISTLEWATER);
16833 }
16834 }
16835
16836 // for(int32_t m=0; m<32; m++)
16837 // {
16838 // // ffcScriptData used to be part of mapscr, and this was handled just above
16839 // ffcScriptData[m].a[0] = 10000;
16840 // ffcScriptData[m].a[1] = 10000;
16841 // }
16842
16843 //2.55 starts here
16844
3/4
✓ Branch 0 taken 6936 times.
✓ Branch 1 taken 98872 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6936 times.
105808 if ( version >= 19 && Header->zelda_version > 0x253 )
16845 {
16846
2/2
✓ Branch 0 taken 69360 times.
✓ Branch 1 taken 6936 times.
76296 for ( int32_t q = 0; q < 10; q++ )
16847 {
16848
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 69360 times.
69360 if(!p_igetl(&(temp_mapscr->npcstrings[q]),f,true))
16849 {
16850 return qe_invalid;
16851 }
16852 69360 }
16853
2/2
✓ Branch 0 taken 69360 times.
✓ Branch 1 taken 6936 times.
76296 for ( int32_t q = 0; q < 10; q++ )
16854 {
16855
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 69360 times.
69360 if(!p_igetw(&(temp_mapscr->new_items[q]),f,true))
16856 {
16857 return qe_invalid;
16858 }
16859 69360 }
16860
2/2
✓ Branch 0 taken 69360 times.
✓ Branch 1 taken 6936 times.
76296 for ( int32_t q = 0; q < 10; q++ )
16861 {
16862
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 69360 times.
69360 if(!p_igetw(&(temp_mapscr->new_item_x[q]),f,true))
16863 {
16864 return qe_invalid;
16865 }
16866 69360 }
16867
2/2
✓ Branch 0 taken 6936 times.
✓ Branch 1 taken 69360 times.
76296 for ( int32_t q = 0; q < 10; q++ )
16868 {
16869
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 69360 times.
69360 if(!p_igetw(&(temp_mapscr->new_item_y[q]),f,true))
16870 {
16871 return qe_invalid;
16872 }
16873 69360 }
16874 6936 }
16875
3/4
✓ Branch 0 taken 98872 times.
✓ Branch 1 taken 6936 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 98872 times.
105808 if ( version < 19 && Header->zelda_version > 0x253 )
16876 {
16877 for ( int32_t q = 0; q < 10; q++ )
16878 {
16879 temp_mapscr->npcstrings[q] = 0;
16880 temp_mapscr->new_items[q] = 0;
16881 temp_mapscr->new_item_x[q] = 0;
16882 temp_mapscr->new_item_y[q] = 0;
16883 }
16884 }
16885
3/4
✓ Branch 0 taken 6936 times.
✓ Branch 1 taken 98872 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6936 times.
105808 if ( version >= 20 && Header->zelda_version > 0x253 )
16886 {
16887
1/2
✓ Branch 0 taken 6936 times.
✗ Branch 1 not taken.
6936 if(!p_igetw(&(temp_mapscr->script),f,true))
16888 {
16889 return qe_invalid;
16890 }
16891
2/2
✓ Branch 0 taken 55488 times.
✓ Branch 1 taken 6936 times.
62424 for ( int32_t q = 0; q < 8; q++)
16892 {
16893
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 55488 times.
55488 if(!p_igetl(&(temp_mapscr->screeninitd[q]),f,true))
16894 {
16895 return qe_invalid;
16896 }
16897 55488 }
16898 6936 }
16899
2/2
✓ Branch 0 taken 6936 times.
✓ Branch 1 taken 98872 times.
105808 if ( version < 20 )
16900 {
16901 98872 temp_mapscr->script = 0;
16902
2/2
✓ Branch 0 taken 790976 times.
✓ Branch 1 taken 98872 times.
889848 for ( int32_t q = 0; q < 8; q++) temp_mapscr->screeninitd[q] = 0;
16903 98872 }
16904
3/4
✓ Branch 0 taken 6936 times.
✓ Branch 1 taken 98872 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6936 times.
105808 if ( version >= 21 && Header->zelda_version > 0x253 )
16905 {
16906
1/2
✓ Branch 0 taken 6936 times.
✗ Branch 1 not taken.
6936 if(!p_getc(&(temp_mapscr->preloadscript),f,true))
16907 {
16908 return qe_invalid;
16909 }
16910 6936 }
16911
2/2
✓ Branch 0 taken 98872 times.
✓ Branch 1 taken 6936 times.
105808 if ( version < 21 )
16912 {
16913 98872 temp_mapscr->preloadscript = 0;
16914 98872 }
16915 //all builds with version > 20 need this. -Z
16916 105808 temp_mapscr->ffcswaitdraw = 0;
16917
16918
3/4
✓ Branch 0 taken 6936 times.
✓ Branch 1 taken 98872 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6936 times.
105808 if ( version >= 22 && Header->zelda_version > 0x253 ) //26th June, 2019; Layer Visibility
16919 {
16920
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6936 times.
6936 if(!p_getc(&(temp_mapscr->hidelayers ),f,true))
16921 {
16922 return qe_invalid;
16923 }
16924
1/2
✓ Branch 0 taken 6936 times.
✗ Branch 1 not taken.
6936 if(!p_getc(&(temp_mapscr->hidescriptlayers ),f,true))
16925 {
16926 return qe_invalid;
16927 }
16928 6936 }
16929
2/2
✓ Branch 0 taken 98872 times.
✓ Branch 1 taken 6936 times.
105808 if ( version < 22 )
16930 {
16931 98872 temp_mapscr->hidelayers = 0;
16932 98872 temp_mapscr->hidescriptlayers = 0;
16933 98872 }
16934
16935 //Dodongos in 2.10 used the boss roar, not the dodongo sound. -Z
16936 //May be any version before 2.11. -Z
16937 /* --not the roar, the HIT SFX
16938 if ( Header->zelda_version <= 0x210 )
16939 {
16940 if ( temp_mapscr->bosssfx == WAV_DODONGO )
16941 {
16942 temp_mapscr->bosssfx = WAV_ROAR;
16943 }
16944 }
16945 */
16946
16947 105808 return 0;
16948 105808 }
16949 106624 int32_t readmapscreen(PACKFILE *f, zquestheader *Header, mapscr *temp_mapscr, zcmap *temp_map, word version)
16950 {
16951
2/2
✓ Branch 0 taken 105808 times.
✓ Branch 1 taken 816 times.
106624 if(version < 23)
16952 {
16953 105808 auto ret = readmapscreen_old(f,Header,temp_mapscr,temp_map,version);
16954
1/2
✓ Branch 0 taken 105808 times.
✗ Branch 1 not taken.
105808 if(ret) return ret;
16955 105808 temp_mapscr->update_ffc_count(31);
16956 105808 }
16957 else
16958 {
16959
1/2
✓ Branch 0 taken 816 times.
✗ Branch 1 not taken.
816 if(!p_getc(&(temp_mapscr->valid),f,true))
16960 return qe_invalid;
16961
2/2
✓ Branch 0 taken 47 times.
✓ Branch 1 taken 769 times.
816 if(!(temp_mapscr->valid & mVALID))
16962 769 return 0; //Empty screen
16963 uint32_t scr_has_flags;
16964
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 47 times.
47 if(!p_igetl(&scr_has_flags,f,true))
16965 return qe_invalid;
16966
16967
1/2
✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
47 if(scr_has_flags & SCRHAS_ROOMDATA)
16968 {
16969 if(!p_getc(&(temp_mapscr->guy),f,true))
16970 return qe_invalid;
16971 if(!p_igetw(&(temp_mapscr->str),f,true))
16972 return qe_invalid;
16973 if(!p_getc(&(temp_mapscr->room),f,true))
16974 return qe_invalid;
16975 if(!p_igetw(&(temp_mapscr->catchall),f,true))
16976 return qe_invalid;
16977 }
16978
2/2
✓ Branch 0 taken 46 times.
✓ Branch 1 taken 1 times.
47 if(scr_has_flags & SCRHAS_ITEM)
16979 {
16980
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if(!p_getc(&(temp_mapscr->item),f,true))
16981 return qe_invalid;
16982
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 if(!p_getc(&(temp_mapscr->hasitem),f,true))
16983 return qe_invalid;
16984
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if(!p_getc(&(temp_mapscr->itemx),f,true))
16985 return qe_invalid;
16986
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if(!p_getc(&(temp_mapscr->itemy),f,true))
16987 return qe_invalid;
16988 1 }
16989
2/2
✓ Branch 0 taken 42 times.
✓ Branch 1 taken 5 times.
47 if(scr_has_flags & (SCRHAS_SWARP|SCRHAS_TWARP))
16990 {
16991
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
5 if(!p_igetw(&temp_mapscr->warpreturnc,f,true))
16992 return qe_invalid;
16993 5 }
16994
2/2
✓ Branch 0 taken 46 times.
✓ Branch 1 taken 1 times.
47 if(scr_has_flags & SCRHAS_TWARP)
16995 {
16996
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
5 for(int32_t i=0; i<4; i++)
16997 {
16998
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if(!p_getc(&(temp_mapscr->tilewarptype[i]),f,true))
16999 return qe_invalid;
17000 4 }
17001
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
5 for(int32_t i=0; i<4; i++)
17002 {
17003
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if(!p_igetw(&(temp_mapscr->tilewarpdmap[i]),f,true))
17004 return qe_invalid;
17005 4 }
17006
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
5 for(int32_t i=0; i<4; i++)
17007 {
17008
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
4 if(!p_getc(&(temp_mapscr->tilewarpscr[i]),f,true))
17009 return qe_invalid;
17010 4 }
17011
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if(!p_getc(&(temp_mapscr->tilewarpoverlayflags),f,true))
17012 return qe_invalid;
17013 1 }
17014
2/2
✓ Branch 0 taken 43 times.
✓ Branch 1 taken 4 times.
47 if(scr_has_flags & SCRHAS_SWARP)
17015 {
17016
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t i=0; i<4; i++)
17017 {
17018
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&(temp_mapscr->sidewarptype[i]),f,true))
17019 return qe_invalid;
17020 16 }
17021
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t i=0; i<4; i++)
17022 {
17023
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_igetw(&(temp_mapscr->sidewarpdmap[i]),f,true))
17024 return qe_invalid;
17025 16 }
17026
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 4 times.
20 for(int32_t i=0; i<4; i++)
17027 {
17028
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
16 if(!p_getc(&(temp_mapscr->sidewarpscr[i]),f,true))
17029 return qe_invalid;
17030 16 }
17031
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_getc(&(temp_mapscr->sidewarpoverlayflags),f,true))
17032 return qe_invalid;
17033
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_getc(&(temp_mapscr->sidewarpindex),f,true))
17034 return qe_invalid;
17035 4 }
17036
2/2
✓ Branch 0 taken 39 times.
✓ Branch 1 taken 8 times.
47 if(scr_has_flags & SCRHAS_WARPRET)
17037 {
17038
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 8 times.
40 for(int32_t i=0; i<4; i++)
17039 {
17040
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
32 if(!p_getc(&(temp_mapscr->warpreturnx[i]),f,true))
17041 return qe_invalid;
17042 32 }
17043
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 8 times.
40 for(int32_t i=0; i<4; i++)
17044 {
17045
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
32 if(!p_getc(&(temp_mapscr->warpreturny[i]),f,true))
17046 return qe_invalid;
17047 32 }
17048
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 if(!p_getc(&(temp_mapscr->warparrivalx),f,true))
17049 return qe_invalid;
17050
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 if(!p_getc(&(temp_mapscr->warparrivaly),f,true))
17051 return qe_invalid;
17052 8 }
17053
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 38 times.
47 if(scr_has_flags & SCRHAS_LAYERS)
17054 {
17055
2/2
✓ Branch 0 taken 54 times.
✓ Branch 1 taken 9 times.
63 for(int32_t k=0; k<6; k++)
17056 {
17057
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 54 times.
54 if(!p_getc(&(temp_mapscr->layermap[k]),f,true))
17058 return qe_invalid;
17059 54 }
17060
2/2
✓ Branch 0 taken 54 times.
✓ Branch 1 taken 9 times.
63 for(int32_t k=0; k<6; k++)
17061 {
17062
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 54 times.
54 if(!p_getc(&(temp_mapscr->layerscreen[k]),f,true))
17063 return qe_invalid;
17064 54 }
17065
2/2
✓ Branch 0 taken 54 times.
✓ Branch 1 taken 9 times.
63 for(int32_t k=0; k<6; k++)
17066 {
17067
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 54 times.
54 if(!p_getc(&(temp_mapscr->layeropacity[k]),f,true))
17068 return qe_invalid;
17069 54 }
17070
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 if(!p_getc(&(temp_mapscr->hidelayers),f,true))
17071 return qe_invalid;
17072
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 if(!p_getc(&(temp_mapscr->hidescriptlayers),f,true))
17073 return qe_invalid;
17074 9 }
17075 else
17076 {
17077
2/2
✓ Branch 0 taken 228 times.
✓ Branch 1 taken 38 times.
266 for(int32_t k=0; k<6; k++)
17078 {
17079 228 temp_mapscr->layeropacity[k] = 255;
17080 228 }
17081 }
17082
1/2
✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
47 if(scr_has_flags & SCRHAS_MAZE)
17083 {
17084 for(int32_t k=0; k<4; k++)
17085 {
17086 if(!p_getc(&(temp_mapscr->path[k]),f,true))
17087 return qe_invalid;
17088 }
17089 if(!p_getc(&(temp_mapscr->exitdir),f,true))
17090 return qe_invalid;
17091 }
17092
2/2
✓ Branch 0 taken 35 times.
✓ Branch 1 taken 12 times.
47 if(scr_has_flags & SCRHAS_D_S_U)
17093 {
17094
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_igetw(&(temp_mapscr->door_combo_set),f,true))
17095 return qe_invalid;
17096
2/2
✓ Branch 0 taken 48 times.
✓ Branch 1 taken 12 times.
60 for(int32_t k=0; k<4; k++)
17097 {
17098
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 48 times.
48 if(!p_getc(&(temp_mapscr->door[k]),f,true))
17099 return qe_invalid;
17100 48 }
17101
17102
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&(temp_mapscr->stairx),f,true))
17103 return qe_invalid;
17104
17105
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&(temp_mapscr->stairy),f,true))
17106 return qe_invalid;
17107
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if(!p_igetw(&(temp_mapscr->undercombo),f,true))
17108 return qe_invalid;
17109
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&(temp_mapscr->undercset),f,true))
17110 return qe_invalid;
17111 12 }
17112
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 15 times.
47 if(scr_has_flags & SCRHAS_FLAGS)
17113 {
17114
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 if(!p_getc(&(temp_mapscr->flags),f,true))
17115 return qe_invalid;
17116
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 if(!p_getc(&(temp_mapscr->flags2),f,true))
17117 return qe_invalid;
17118
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 if(!p_getc(&(temp_mapscr->flags3),f,true))
17119 return qe_invalid;
17120
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 if(!p_getc(&(temp_mapscr->flags4),f,true))
17121 return qe_invalid;
17122
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 if(!p_getc(&(temp_mapscr->flags5),f,true))
17123 return qe_invalid;
17124
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
15 if(!p_getc(&(temp_mapscr->flags6),f,true))
17125 return qe_invalid;
17126
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 if(!p_getc(&(temp_mapscr->flags7),f,true))
17127 return qe_invalid;
17128
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 if(!p_getc(&(temp_mapscr->flags8),f,true))
17129 return qe_invalid;
17130
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 if(!p_getc(&(temp_mapscr->flags9),f,true))
17131 return qe_invalid;
17132
1/2
✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
15 if(!p_getc(&(temp_mapscr->flags10),f,true))
17133 return qe_invalid;
17134
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
15 if(!p_getc(&(temp_mapscr->enemyflags),f,true))
17135 return qe_invalid;
17136 15 }
17137
2/2
✓ Branch 0 taken 44 times.
✓ Branch 1 taken 3 times.
47 if(scr_has_flags & SCRHAS_ENEMY)
17138 {
17139
2/2
✓ Branch 0 taken 30 times.
✓ Branch 1 taken 3 times.
33 for(int32_t k=0; k<10; k++)
17140 {
17141
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 30 times.
30 if(!p_igetw(&(temp_mapscr->enemy[k]),f,true))
17142 return qe_invalid;
17143
1/2
✓ Branch 0 taken 30 times.
✗ Branch 1 not taken.
30 if (unsigned(temp_mapscr->enemy[k]) > MAXGUYS)
17144 temp_mapscr->enemy[k] = 0;
17145 30 }
17146
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
3 if(!p_getc(&(temp_mapscr->pattern),f,true))
17147 return qe_invalid;
17148 3 }
17149
1/2
✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
47 if(scr_has_flags & SCRHAS_CARRY)
17150 {
17151 if(!p_igetw(&(temp_mapscr->noreset),f,true))
17152 return qe_invalid;
17153 if(!p_igetw(&(temp_mapscr->nocarry),f,true))
17154 return qe_invalid;
17155 if(!p_getc(&(temp_mapscr->nextmap),f,true))
17156 return qe_invalid;
17157 if(!p_getc(&(temp_mapscr->nextscr),f,true))
17158 return qe_invalid;
17159 }
17160
1/2
✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
47 if(scr_has_flags & SCRHAS_SCRIPT)
17161 {
17162 if(!p_igetw(&(temp_mapscr->script),f,true))
17163 return qe_invalid;
17164 if(!p_getc(&(temp_mapscr->preloadscript),f,true))
17165 return qe_invalid;
17166 for ( int32_t q = 0; q < 8; q++ )
17167 {
17168 if(!p_igetl(&(temp_mapscr->screeninitd[q]),f,true))
17169 return qe_invalid;
17170 }
17171 }
17172
1/2
✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
47 if(scr_has_flags & SCRHAS_UNUSED)
17173 {
17174 for ( int32_t q = 0; q < 10; q++ )
17175 {
17176 if(!p_igetl(&(temp_mapscr->npcstrings[q]),f,true))
17177 return qe_invalid;
17178 }
17179 for ( int32_t q = 0; q < 10; q++ )
17180 {
17181 if(!p_igetw(&(temp_mapscr->new_items[q]),f,true))
17182 return qe_invalid;
17183 }
17184 for ( int32_t q = 0; q < 10; q++ )
17185 {
17186 if(!p_igetw(&(temp_mapscr->new_item_x[q]),f,true))
17187 return qe_invalid;
17188 }
17189 for ( int32_t q = 0; q < 10; q++ )
17190 {
17191 if(!p_igetw(&(temp_mapscr->new_item_y[q]),f,true))
17192 return qe_invalid;
17193 }
17194 }
17195
2/2
✓ Branch 0 taken 35 times.
✓ Branch 1 taken 12 times.
47 if(scr_has_flags & SCRHAS_SECRETS)
17196 {
17197
2/2
✓ Branch 0 taken 1536 times.
✓ Branch 1 taken 12 times.
1548 for(int32_t k=0; k<128; k++)
17198 {
17199
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1536 times.
1536 if(!p_igetw(&(temp_mapscr->secretcombo[k]),f,true))
17200 return qe_invalid;
17201 1536 }
17202
2/2
✓ Branch 0 taken 1536 times.
✓ Branch 1 taken 12 times.
1548 for(int32_t k=0; k<128; k++)
17203 {
17204
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1536 times.
1536 if(!p_getc(&(temp_mapscr->secretcset[k]),f,true))
17205 return qe_invalid;
17206 1536 }
17207
2/2
✓ Branch 0 taken 1536 times.
✓ Branch 1 taken 12 times.
1548 for(int32_t k=0; k<128; k++)
17208 {
17209
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1536 times.
1536 if(!p_getc(&(temp_mapscr->secretflag[k]),f,true))
17210 return qe_invalid;
17211 1536 }
17212 12 }
17213
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 47 times.
47 if(scr_has_flags & SCRHAS_COMBOFLAG)
17214 {
17215
2/2
✓ Branch 0 taken 8272 times.
✓ Branch 1 taken 47 times.
8319 for(int32_t k=0; k<176; ++k)
17216 {
17217
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8272 times.
8272 if(!p_igetw(&(temp_mapscr->data[k]),f,true))
17218 return qe_invalid;
17219 8272 }
17220
2/2
✓ Branch 0 taken 8272 times.
✓ Branch 1 taken 47 times.
8319 for(int32_t k=0; k<176; ++k)
17221 {
17222
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8272 times.
8272 if(!p_getc(&(temp_mapscr->sflag[k]),f,true))
17223 return qe_invalid;
17224 8272 }
17225
2/2
✓ Branch 0 taken 8272 times.
✓ Branch 1 taken 47 times.
8319 for(int32_t k=0; k<176; ++k)
17226 {
17227
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8272 times.
8272 if(!p_getc(&(temp_mapscr->cset[k]),f,true))
17228 return qe_invalid;
17229 8272 }
17230 47 }
17231
1/2
✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
47 if(scr_has_flags & SCRHAS_MISC)
17232 {
17233
1/2
✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
47 if(!p_igetw(&(temp_mapscr->color),f,true))
17234 return qe_invalid;
17235
1/2
✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
47 if(!p_getc(&(temp_mapscr->csensitive),f,true))
17236 return qe_invalid;
17237
1/2
✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
47 if(!p_getc(&(temp_mapscr->oceansfx),f,true))
17238 return qe_invalid;
17239
1/2
✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
47 if(!p_getc(&(temp_mapscr->bosssfx),f,true))
17240 return qe_invalid;
17241
1/2
✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
47 if(!p_getc(&(temp_mapscr->secretsfx),f,true))
17242 return qe_invalid;
17243
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 47 times.
47 if(!p_getc(&(temp_mapscr->holdupsfx),f,true))
17244 return qe_invalid;
17245
1/2
✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
47 if(!p_igetw(&(temp_mapscr->timedwarptics),f,true))
17246 return qe_invalid;
17247
1/2
✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
47 if(!p_igetw(&(temp_mapscr->screen_midi),f,true))
17248 return qe_invalid;
17249
1/2
✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
47 if(!p_getc(&(temp_mapscr->lens_layer),f,true))
17250 return qe_invalid;
17251 47 }
17252 else
17253 {
17254 temp_mapscr->screen_midi = -1;
17255 temp_mapscr->csensitive = 1;
17256 }
17257 //FFC
17258 47 bool old_ff = version < 25;
17259 47 dword bits = 0;
17260 47 word numffc = 32;
17261
2/2
✓ Branch 0 taken 22 times.
✓ Branch 1 taken 25 times.
47 if(old_ff)
17262 {
17263
1/2
✓ Branch 0 taken 22 times.
✗ Branch 1 not taken.
22 if(!p_igetl(&bits,f,true))
17264 return qe_invalid;
17265 22 }
17266 else
17267 {
17268
1/2
✓ Branch 0 taken 25 times.
✗ Branch 1 not taken.
25 if(!p_igetw(&numffc,f,true))
17269 return qe_invalid;
17270 }
17271 byte tempbyte;
17272 word tempw;
17273
4/6
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 44 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 3 times.
47 static ffcdata nil_ffc;
17274
2/2
✓ Branch 0 taken 47 times.
✓ Branch 1 taken 1013 times.
1060 for(word m = 0; m < numffc; ++m)
17275 {
17276
1/2
✓ Branch 0 taken 1013 times.
✗ Branch 1 not taken.
1013 ffcdata& tempffc = (m < MAXFFCS)
17277 1013 ? temp_mapscr->ffcs[m]
17278 : nil_ffc; //sanity
17279 1013 tempffc.clear();
17280
3/4
✓ Branch 0 taken 704 times.
✓ Branch 1 taken 309 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 704 times.
1013 if(old_ff && !(bits & (1<<m))) continue;
17281
17282
1/2
✓ Branch 0 taken 309 times.
✗ Branch 1 not taken.
309 if(!p_igetw(&tempw,f,true))
17283 return qe_invalid;
17284
3/4
✓ Branch 0 taken 309 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 42 times.
✓ Branch 3 taken 267 times.
309 if(!old_ff && !tempw) //empty ffc, nothing more to load
17285 267 continue;
17286 42 tempffc.setData(tempw);
17287
17288
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
42 if(!p_getc(&(tempffc.cset),f,true))
17289 return qe_invalid;
17290
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
42 if(!p_igetw(&(tempffc.delay),f,true))
17291 return qe_invalid;
17292
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
42 if(!p_igetzf(&(tempffc.x),f,true))
17293 return qe_invalid;
17294
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
42 if(!p_igetzf(&(tempffc.y),f,true))
17295 return qe_invalid;
17296
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
42 if(!p_igetzf(&(tempffc.vx),f,true))
17297 return qe_invalid;
17298
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
42 if(!p_igetzf(&(tempffc.vy),f,true))
17299 return qe_invalid;
17300
1/2
✓ Branch 0 taken 42 times.
✗ Branch 1 not taken.
42 if(!p_igetzf(&(tempffc.ax),f,true))
17301 return qe_invalid;
17302
1/2
✓ Branch 0 taken 42 times.
✗ Branch 1 not taken.
42 if(!p_igetzf(&(tempffc.ay),f,true))
17303 return qe_invalid;
17304
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
42 if(!p_getc(&(tempffc.link),f,true))
17305 return qe_invalid;
17306
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
42 if(version < 24)
17307 {
17308 if(!p_getc(&tempbyte,f,true))
17309 return qe_invalid;
17310 tempffc.hxsz = (tempbyte&0x3F)+1;
17311 tempffc.txsz = (tempbyte>>6)+1;
17312 if(!p_getc(&tempbyte,f,true))
17313 return qe_invalid;
17314 tempffc.hysz = (tempbyte&0x3F)+1;
17315 tempffc.tysz = (tempbyte>>6)+1;
17316 }
17317 else
17318 {
17319
1/2
✓ Branch 0 taken 42 times.
✗ Branch 1 not taken.
42 if(!p_igetl(&(tempffc.hxsz),f,true))
17320 return qe_invalid;
17321
1/2
✓ Branch 0 taken 42 times.
✗ Branch 1 not taken.
42 if(!p_igetl(&(tempffc.hysz),f,true))
17322 return qe_invalid;
17323
1/2
✓ Branch 0 taken 42 times.
✗ Branch 1 not taken.
42 if(!p_getc(&(tempffc.txsz),f,true))
17324 return qe_invalid;
17325
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
42 if(!p_getc(&(tempffc.tysz),f,true))
17326 return qe_invalid;
17327 }
17328
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
42 if(!p_igetl(&(tempffc.flags),f,true))
17329 return qe_invalid;
17330 42 tempffc.updateSolid();
17331
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
42 if(!p_igetw(&(tempffc.script),f,true))
17332 return qe_invalid;
17333
2/2
✓ Branch 0 taken 336 times.
✓ Branch 1 taken 42 times.
378 for(auto q = 0; q < 8; ++q)
17334 {
17335
1/2
✓ Branch 0 taken 336 times.
✗ Branch 1 not taken.
336 if(!p_igetl(&(tempffc.initd[q]),f,true))
17336 return qe_invalid;
17337 336 }
17338
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 42 times.
42 if(!p_getc(&(tempbyte),f,true))
17339 return qe_invalid;
17340 42 tempffc.inita[0]=tempbyte*10000;
17341
17342
1/2
✓ Branch 0 taken 42 times.
✗ Branch 1 not taken.
42 if(!p_getc(&(tempbyte),f,true))
17343 return qe_invalid;
17344 42 tempffc.inita[1]=tempbyte*10000;
17345
17346 42 tempffc.initialized = false;
17347 42 }
17348
2/2
✓ Branch 0 taken 5003 times.
✓ Branch 1 taken 47 times.
5050 for(word m = numffc; m < MAXFFCS; ++m)
17349 {
17350 5003 temp_mapscr->ffcs[m].clear();
17351 5003 }
17352 47 temp_mapscr->update_ffc_count(numffc-1);
17353 //END FFC
17354 }
17355 105855 return 0;
17356 106624 }
17357
17358
17359 63 int32_t readmaps(PACKFILE *f, zquestheader *Header, bool keepdata)
17360 {
17361 63 int32_t scr=0;
17362
17363 63 word version=0;
17364 dword dummy;
17365 int32_t screens_to_read;
17366
17367 63 mapscr temp_mapscr;
17368 zcmap temp_map;
17369 word temp_map_count;
17370 dword section_size;
17371
17372
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<137)))
17373 {
17374 screens_to_read=MAPSCRS192b136;
17375 }
17376 else
17377 {
17378 63 screens_to_read=MAPSCRS;
17379 }
17380
17381
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(Header->zelda_version > 0x192)
17382 {
17383 //section version info
17384
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&version,f,true))
17385 {
17386 return qe_invalid;
17387 }
17388
17389 63 FFCore.quest_format[vMaps] = version;
17390
17391 //al_trace("Maps version %d\n", version);
17392
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&dummy,f,true))
17393 {
17394 return qe_invalid;
17395 }
17396
17397 //section size
17398
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetl(&section_size,f,true))
17399 {
17400 return qe_invalid;
17401 }
17402
17403 //finally... section data
17404
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_map_count,f,true))
17405 {
17406 return 5;
17407 }
17408 63 }
17409 else
17410 {
17411 temp_map_count=map_count;
17412 }
17413
17414
17415
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(keepdata)
17416 {
17417 63 const int32_t _mapsSize = MAPSCRS*temp_map_count;
17418
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 TheMaps.resize(_mapsSize);
17419
17420
2/2
✓ Branch 0 taken 106624 times.
✓ Branch 1 taken 63 times.
106687 for(int32_t i(0); i<_mapsSize; i++)
17421
1/2
✓ Branch 0 taken 106624 times.
✗ Branch 1 not taken.
106624 TheMaps[i].zero_memory();
17422
17423 // Used to be done for each screen
17424
2/2
✓ Branch 0 taken 8064 times.
✓ Branch 1 taken 63 times.
8127 for(int32_t i=0; i<MAXFFCS; i++)
17425 {
17426 8064 ffcScriptData[i].a[0] = 10000;
17427 8064 ffcScriptData[i].a[1] = 10000;
17428 8064 }
17429
17430 63 memset(ZCMaps, 0, sizeof(zcmap)*MAXMAPS2);
17431 63 }
17432
17433
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 temp_mapscr.zero_memory();
17434
17435 63 memset(&temp_map, 0, sizeof(zcmap));
17436 63 temp_map.scrResWidth = 256;
17437 63 temp_map.scrResHeight = 224;
17438 63 temp_map.tileWidth = 16;
17439 63 temp_map.tileHeight = 11;
17440 63 temp_map.viewWidth = 256;
17441 63 temp_map.viewHeight = 176;
17442 63 temp_map.viewX = 0;
17443 63 temp_map.viewY = 64;
17444 63 temp_map.subaWidth = 256;
17445 63 temp_map.subaHeight = 168;
17446 63 temp_map.subaTrans = false;
17447 63 temp_map.subpWidth = 256;
17448 63 temp_map.subpHeight = 56;
17449 63 temp_map.subpTrans = false;
17450
4/4
✓ Branch 0 taken 63 times.
✓ Branch 1 taken 784 times.
✓ Branch 2 taken 63 times.
✓ Branch 3 taken 784 times.
847 for(int32_t i=0; i<temp_map_count && i<MAXMAPS2; i++)
17451 {
17452
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 784 times.
784 if(keepdata==true) //!TODO Trim fully
17453 {
17454 784 memcpy(&ZCMaps[i], &temp_map, sizeof(zcmap));
17455 784 }
17456 784 byte valid=1;
17457
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 778 times.
784 if(version > 22)
17458 {
17459
2/4
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
6 if(!p_getc(&valid,f,true))
17460 return qe_invalid;
17461 6 }
17462
2/2
✓ Branch 0 taken 106624 times.
✓ Branch 1 taken 784 times.
107408 for(int32_t j=0; j<screens_to_read; j++)
17463 {
17464 106624 scr=i*MAPSCRS+j;
17465
1/2
✓ Branch 0 taken 106624 times.
✗ Branch 1 not taken.
106624 clear_screen(&temp_mapscr);
17466
1/2
✓ Branch 0 taken 106624 times.
✗ Branch 1 not taken.
106624 if(valid)
17467
1/2
✓ Branch 0 taken 106624 times.
✗ Branch 1 not taken.
106624 readmapscreen(f, Header, &temp_mapscr, &temp_map, version);
17468
17469
1/2
✓ Branch 0 taken 106624 times.
✗ Branch 1 not taken.
106624 if(keepdata==true)
17470 {
17471
1/2
✓ Branch 0 taken 106624 times.
✗ Branch 1 not taken.
106624 TheMaps[scr] = temp_mapscr;
17472 106624 }
17473 106624 }
17474
17475
1/2
✓ Branch 0 taken 784 times.
✗ Branch 1 not taken.
784 if(keepdata==true)
17476 {
17477
2/6
✓ Branch 0 taken 784 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 784 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
784 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<137)))
17478 {
17479 int32_t index = (i*MAPSCRS+132);
17480
17481 TheMaps[index]=TheMaps[index-1];
17482
17483 MEMCPY_ARR(TheMaps[i*MAPSCRS+132].data, TheMaps[i*MAPSCRS+131].data);
17484 MEMCPY_ARR(TheMaps[i*MAPSCRS+132].sflag, TheMaps[i*MAPSCRS+131].sflag);
17485 MEMCPY_ARR(TheMaps[i*MAPSCRS+132].cset, TheMaps[i*MAPSCRS+131].cset);
17486
17487 for(int32_t j=133; j<MAPSCRS; j++)
17488 {
17489 scr=i*MAPSCRS+j;
17490
17491 TheMaps[scr].zero_memory();
17492 TheMaps[scr].valid = mVERSION;
17493 TheMaps[scr].screen_midi = -1;
17494 TheMaps[scr].csensitive = 1;
17495 }
17496 }
17497
17498
2/6
✓ Branch 0 taken 784 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 784 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
784 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<154)))
17499 {
17500 for(int32_t j=0; j<MAPSCRS; j++)
17501 {
17502 scr=i*MAPSCRS+j;
17503 TheMaps[scr].door_combo_set=MakeDoors(i, j);
17504
17505 for(int32_t k=0; k<128; k++)
17506 {
17507 TheMaps[scr].secretcset[k]=tcmbcset2(i, TheMaps[scr].secretcombo[k]);
17508 TheMaps[scr].secretflag[k]=tcmbflag2(i, TheMaps[scr].secretcombo[k]);
17509 TheMaps[scr].secretcombo[k]=tcmbdat2(i, j, TheMaps[scr].secretcombo[k]);
17510 }
17511 }
17512 }
17513 784 }
17514 784 }
17515
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata)
17516 {
17517 63 map_count = temp_map_count;
17518 63 }
17519
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 clear_screen(&temp_mapscr);
17520 63 return 0;
17521 63 }
17522
17523
17524 60 int32_t readcombos_old(word section_version, PACKFILE *f, zquestheader *, word version, word build, word start_combo, word max_combos, bool keepdata)
17525 {
17526 60 reset_combo_animations();
17527 60 reset_combo_animations2();
17528
17529 60 init_combo_classes();
17530
17531 // combos
17532 60 word combos_used=0;
17533 int32_t dummy;
17534 byte padding;
17535 60 newcombo temp_combo;
17536 //word section_cversion=0;
17537
17538
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 60 times.
60 if(keepdata==true)
17539 {
17540
2/2
✓ Branch 0 taken 3916800 times.
✓ Branch 1 taken 60 times.
3916860 for(int32_t q = start_combo; q < start_combo+max_combos; ++q)
17541 3916800 combobuf[q].clear();
17542 60 }
17543
17544 // if(version > 0x192)
17545 // {
17546 // //section version info
17547 // if(!p_igetw(&section_version,f,true))
17548 // {
17549 // return qe_invalid;
17550 // }
17551
17552 // FFCore.quest_format[vCombos] = section_version;
17553
17554 // //al_trace("Combos version %d\n", section_version);
17555 // if(!p_igetw(&section_cversion,f,true))
17556 // {
17557 // return qe_invalid;
17558 // }
17559
17560 // //section size
17561 // if(!p_igetl(&dummy,f,true))
17562 // {
17563 // return qe_invalid;
17564 // }
17565 // }
17566
17567
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 60 times.
60 if(version < 0x174)
17568 {
17569 combos_used=1024;
17570 }
17571
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 60 times.
60 else if(version < 0x191)
17572 {
17573 combos_used=2048;
17574 }
17575 else
17576 {
17577
1/2
✓ Branch 0 taken 60 times.
✗ Branch 1 not taken.
60 if(!p_igetw(&combos_used,f,true))
17578 {
17579 return qe_invalid;
17580 }
17581 }
17582
17583 //finally... section data
17584
2/2
✓ Branch 0 taken 212294 times.
✓ Branch 1 taken 60 times.
212354 for(int32_t i=0; i<combos_used; i++)
17585 {
17586 212294 temp_combo.clear();
17587
17588
2/2
✓ Branch 0 taken 65200 times.
✓ Branch 1 taken 147094 times.
212294 if ( section_version >= 11 )
17589 {
17590
1/2
✓ Branch 0 taken 65200 times.
✗ Branch 1 not taken.
65200 if(!p_igetl(&temp_combo.tile,f,true))
17591 {
17592 return qe_invalid;
17593 }
17594 65200 }
17595 else
17596 {
17597
1/2
✓ Branch 0 taken 147094 times.
✗ Branch 1 not taken.
147094 if(!p_igetw(&temp_combo.tile,f,true))
17598 {
17599 return qe_invalid;
17600 }
17601 }
17602 212294 temp_combo.o_tile = temp_combo.tile;
17603
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(!p_getc(&temp_combo.flip,f,true))
17604 {
17605 return qe_invalid;
17606 }
17607
17608
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(!p_getc(&temp_combo.walk,f,true))
17609 {
17610 return qe_invalid;
17611 }
17612
17613
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(!p_getc(&temp_combo.type,f,true))
17614 {
17615 return qe_invalid;
17616 }
17617
17618
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(!p_getc(&temp_combo.csets,f,true))
17619 {
17620 return qe_invalid;
17621 }
17622
17623
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(version < 0x193)
17624 {
17625 if(!p_getc(&padding,f,true))
17626 {
17627 return qe_invalid;
17628 }
17629
17630 if(!p_getc(&padding,f,true))
17631 {
17632 return qe_invalid;
17633 }
17634
17635 if(version < 0x192)
17636 {
17637 if(version == 0x191)
17638 {
17639 for(int32_t tmpcounter=0; tmpcounter<16; tmpcounter++)
17640 {
17641 if(!p_getc(&padding,f,true))
17642 {
17643 return qe_invalid;
17644 }
17645 }
17646 }
17647
17648 if(keepdata==true)
17649 {
17650 memcpy(&combobuf[i], &temp_combo, sizeof(temp_combo));
17651 }
17652
17653 continue;
17654 }
17655 }
17656
17657
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(!p_getc(&temp_combo.frames,f,true))
17658 {
17659 return qe_invalid;
17660 }
17661
17662
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(!p_getc(&temp_combo.speed,f,true))
17663 {
17664 return qe_invalid;
17665 }
17666
17667
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(!p_igetw(&temp_combo.nextcombo,f,true))
17668 {
17669 return qe_invalid;
17670 }
17671
17672
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(!p_getc(&temp_combo.nextcset,f,true))
17673 {
17674 return qe_invalid;
17675 }
17676
17677 //Base flag
17678
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212294 times.
212294 if(section_version>=3)
17679 {
17680
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(!p_getc(&temp_combo.flag,f,true))
17681 {
17682 return qe_invalid;
17683 }
17684 212294 }
17685
17686
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212294 times.
212294 if(section_version>=4)
17687 {
17688
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(!p_getc(&temp_combo.skipanim,f,true))
17689 {
17690 return qe_invalid;
17691 }
17692
17693
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(!p_igetw(&temp_combo.nexttimer,f,true))
17694 {
17695 return qe_invalid;
17696 }
17697 212294 }
17698
17699
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212294 times.
212294 if(section_version>=5)
17700 {
17701
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(!p_getc(&temp_combo.skipanimy,f,true))
17702 {
17703 return qe_invalid;
17704 }
17705 212294 }
17706
17707
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212294 times.
212294 if(section_version>=6)
17708 {
17709
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(!p_getc(&temp_combo.animflags,f,true))
17710 {
17711 return qe_invalid;
17712 }
17713
17714
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(section_version == 6)
17715 temp_combo.animflags = temp_combo.animflags ? AF_FRESH : 0;
17716 212294 }
17717
17718
2/2
✓ Branch 0 taken 147094 times.
✓ Branch 1 taken 65200 times.
212294 if(section_version>=8) //combo Attributes[4] and userflags.
17719 {
17720
2/2
✓ Branch 0 taken 260800 times.
✓ Branch 1 taken 65200 times.
326000 for ( int32_t q = 0; q < NUM_COMBO_ATTRIBUTES; q++ )
17721 {
17722
1/2
✓ Branch 0 taken 260800 times.
✗ Branch 1 not taken.
260800 if(!p_igetl(&temp_combo.attributes[q],f,true))
17723 {
17724 return qe_invalid;
17725 }
17726 260800 }
17727
1/2
✓ Branch 0 taken 65200 times.
✗ Branch 1 not taken.
65200 if(!p_igetl(&temp_combo.usrflags,f,true))
17728 {
17729 return qe_invalid;
17730 }
17731
1/2
✓ Branch 0 taken 65200 times.
✗ Branch 1 not taken.
65200 if(section_version >= 20)
17732 {
17733
1/2
✓ Branch 0 taken 65200 times.
✗ Branch 1 not taken.
65200 if(!p_igetw(&temp_combo.genflags,f,true))
17734 {
17735 return qe_invalid;
17736 }
17737 65200 }
17738 else
17739 {
17740 temp_combo.genflags = 0;
17741 switch(temp_combo.type)
17742 {
17743 case cPUSH_WAIT: case cPUSH_HEAVY:
17744 case cPUSH_HW: case cL_STATUE:
17745 case cR_STATUE: case cPUSH_HEAVY2:
17746 case cPUSH_HW2: case cPOUND:
17747 case cC_STATUE: case cMIRROR:
17748 case cMIRRORSLASH: case cMIRRORBACKSLASH:
17749 case cMAGICPRISM: case cMAGICPRISM4:
17750 case cMAGICSPONGE: case cEYEBALL_A:
17751 case cEYEBALL_B: case cEYEBALL_4:
17752 case cBUSH: case cFLOWERS:
17753 case cLOCKBLOCK: case cLOCKBLOCK2:
17754 case cBOSSLOCKBLOCK: case cBOSSLOCKBLOCK2:
17755 case cCHEST: case cCHEST2:
17756 case cLOCKEDCHEST: case cLOCKEDCHEST2:
17757 case cBOSSCHEST: case cBOSSCHEST2:
17758 case cBUSHNEXT: case cBUSHTOUCHY:
17759 case cFLOWERSTOUCHY: case cBUSHNEXTTOUCHY:
17760 case cSIGNPOST: case cCSWITCHBLOCK:
17761 case cTORCH: case cTRIGGERGENERIC:
17762 if(temp_combo.usrflags & cflag16)
17763 {
17764 temp_combo.genflags |= cflag1;
17765 temp_combo.usrflags &= ~cflag16;
17766 }
17767 break; }
17768 }
17769 65200 }
17770
2/2
✓ Branch 0 taken 65200 times.
✓ Branch 1 taken 147094 times.
212294 if(section_version>=10) //combo trigger flags
17771 {
17772
2/2
✓ Branch 0 taken 195600 times.
✓ Branch 1 taken 65200 times.
260800 for ( int32_t q = 0; q < 3; q++ )
17773 {
17774
1/2
✓ Branch 0 taken 195600 times.
✗ Branch 1 not taken.
195600 if(!p_igetl(&temp_combo.triggerflags[q],f,true))
17775 {
17776 return qe_invalid;
17777 }
17778 195600 }
17779 65200 }
17780
1/2
✓ Branch 0 taken 147094 times.
✗ Branch 1 not taken.
147094 else if(section_version==9) //combo trigger flags, V9 only had two indices of triggerflags[]
17781 {
17782 for ( int32_t q = 0; q < 2; q++ )
17783 {
17784 if(!p_igetl(&temp_combo.triggerflags[q],f,true))
17785 {
17786 return qe_invalid;
17787 }
17788 }
17789 }
17790
2/2
✓ Branch 0 taken 147094 times.
✓ Branch 1 taken 65200 times.
212294 if(section_version >= 9)
17791 {
17792
1/2
✓ Branch 0 taken 65200 times.
✗ Branch 1 not taken.
65200 if(!p_igetl(&temp_combo.triggerlevel,f,true))
17793 {
17794 return qe_invalid;
17795 }
17796 65200 }
17797
2/2
✓ Branch 0 taken 147094 times.
✓ Branch 1 taken 65200 times.
212294 if(section_version >= 22)
17798 {
17799
1/2
✓ Branch 0 taken 65200 times.
✗ Branch 1 not taken.
65200 if(!p_getc(&temp_combo.triggerbtn,f,true))
17800 {
17801 return qe_invalid;
17802 }
17803 65200 }
17804
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212294 times.
212294 if(section_version < 23)
17805 {
17806
2/2
✓ Branch 0 taken 27 times.
✓ Branch 1 taken 212267 times.
212294 switch(temp_combo.type) //combotriggerCMBTYPEFX now required for combotype-specific effects
17807 {
17808 case cSCRIPT1: case cSCRIPT2: case cSCRIPT3: case cSCRIPT4: case cSCRIPT5:
17809 case cSCRIPT6: case cSCRIPT7: case cSCRIPT8: case cSCRIPT9: case cSCRIPT10:
17810 case cTRIGGERGENERIC: case cCSWITCH:
17811 27 temp_combo.triggerflags[0] |= combotriggerCMBTYPEFX;
17812 27 }
17813 212294 }
17814
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(section_version >= 24)
17815 {
17816 if(!p_getc(&temp_combo.triggeritem,f,true))
17817 {
17818 return qe_invalid;
17819 }
17820 if(!p_getc(&temp_combo.trigtimer,f,true))
17821 {
17822 return qe_invalid;
17823 }
17824 }
17825
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(section_version >= 25)
17826 {
17827 if(!p_getc(&temp_combo.trigsfx,f,true))
17828 {
17829 return qe_invalid;
17830 }
17831 }
17832
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212294 times.
212294 if(section_version >= 27)
17833 {
17834 if(!p_igetl(&temp_combo.trigchange,f,true))
17835 {
17836 return qe_invalid;
17837 }
17838 }
17839 else
17840 {
17841
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212294 times.
212294 if(temp_combo.triggerflags[0] & 0x00040000) //'next'
17842 temp_combo.trigchange = 1;
17843
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212294 times.
212294 else if(temp_combo.triggerflags[0] & 0x00080000) //'prev'
17844 temp_combo.trigchange = -1;
17845 212294 else temp_combo.trigchange = 0;
17846 212294 temp_combo.triggerflags[0] &= ~(0x00040000|0x00080000);
17847 }
17848
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212294 times.
212294 if(section_version >= 29)
17849 {
17850 if(!p_igetw(&temp_combo.trigprox,f,true))
17851 {
17852 return qe_invalid;
17853 }
17854 if(!p_getc(&temp_combo.trigctr,f,true))
17855 {
17856 return qe_invalid;
17857 }
17858 if(!p_igetl(&temp_combo.trigctramnt,f,true))
17859 {
17860 return qe_invalid;
17861 }
17862 }
17863 else
17864 {
17865 212294 temp_combo.trigprox = 0;
17866 212294 temp_combo.trigctr = 0;
17867 212294 temp_combo.trigctramnt = 0;
17868 }
17869
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212294 times.
212294 if(section_version >= 30)
17870 {
17871 if(!p_getc(&temp_combo.triglbeam,f,true))
17872 {
17873 return qe_invalid;
17874 }
17875 }
17876 212294 else temp_combo.triglbeam = 0;
17877
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212294 times.
212294 if(section_version >= 31)
17878 {
17879 if(!p_getc(&temp_combo.trigcschange,f,true))
17880 {
17881 return qe_invalid;
17882 }
17883 if(!p_igetw(&temp_combo.spawnitem,f,true))
17884 {
17885 return qe_invalid;
17886 }
17887 if(!p_igetw(&temp_combo.spawnenemy,f,true))
17888 {
17889 return qe_invalid;
17890 }
17891 if(!p_getc(&temp_combo.exstate,f,true))
17892 {
17893 return qe_invalid;
17894 }
17895 if(!p_igetl(&temp_combo.spawnip,f,true))
17896 {
17897 return qe_invalid;
17898 }
17899 if(!p_getc(&temp_combo.trigcopycat,f,true))
17900 {
17901 return qe_invalid;
17902 }
17903 }
17904 else
17905 {
17906 212294 temp_combo.trigcschange = 0;
17907 212294 temp_combo.spawnitem = 0;
17908 212294 temp_combo.spawnenemy = 0;
17909 212294 temp_combo.exstate = -1;
17910 212294 temp_combo.spawnip = 0;
17911 212294 temp_combo.trigcopycat = 0;
17912 }
17913
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212294 times.
212294 if(section_version >= 32)
17914 {
17915 if(!p_getc(&temp_combo.trigcooldown,f,true))
17916 {
17917 return qe_invalid;
17918 }
17919 }
17920 else
17921 {
17922 212294 temp_combo.trigcooldown = 0;
17923 }
17924
17925
2/2
✓ Branch 0 taken 147094 times.
✓ Branch 1 taken 65200 times.
212294 if(section_version>=12) //combo label
17926 {
17927
2/2
✓ Branch 0 taken 717200 times.
✓ Branch 1 taken 65200 times.
782400 for ( int32_t q = 0; q < 11; q++ )
17928 {
17929
1/2
✓ Branch 0 taken 717200 times.
✗ Branch 1 not taken.
717200 if(!p_getc(&temp_combo.label[q],f,true))
17930 {
17931 return qe_invalid;
17932 }
17933 717200 }
17934 65200 }
17935
2/2
✓ Branch 0 taken 65200 times.
✓ Branch 1 taken 147094 times.
212294 if(section_version<12) //combo label
17936 {
17937
2/2
✓ Branch 0 taken 1618034 times.
✓ Branch 1 taken 147094 times.
1765128 for ( int32_t q = 0; q < 11; q++ )
17938 {
17939 1618034 temp_combo.label[q] = 0;
17940 1618034 }
17941 147094 }
17942 //al_trace("Read combo label\n");
17943
2/2
✓ Branch 0 taken 147094 times.
✓ Branch 1 taken 65200 times.
212294 if(section_version>=13) //attribytes[4]
17944 {
17945
2/2
✓ Branch 0 taken 260800 times.
✓ Branch 1 taken 65200 times.
326000 for ( int32_t q = 0; q < 4; q++ ) //Bad Zoria, don't mix constants with hardcodes
17946 {
17947
1/2
✓ Branch 0 taken 260800 times.
✗ Branch 1 not taken.
260800 if(!p_getc(&temp_combo.attribytes[q],f,true))
17948 {
17949 return qe_invalid;
17950 }
17951 260800 }
17952
17953 65200 }
17954 //al_trace("Read combo attribytes\n");
17955
2/2
✓ Branch 0 taken 65200 times.
✓ Branch 1 taken 147094 times.
212294 if( section_version < 13 )
17956 {
17957
2/2
✓ Branch 0 taken 588376 times.
✓ Branch 1 taken 147094 times.
735470 for ( int32_t q = 0; q < NUM_COMBO_ATTRIBUTES; q++ )
17958 {
17959 588376 temp_combo.attribytes[q] = 0;
17960 588376 }
17961
17962 147094 }
17963 /* HIGHLY UNORTHODOX UPDATING THING, by Deedee
17964 * This fixes a poor implementation of a ->next flag bug thing.
17965 * Zoria didn't bump up the versions as liberally as he should have, but thankfully
17966 * there was a version bump a few weeks before a change that broke stuff.
17967 */
17968
3/4
✓ Branch 0 taken 65200 times.
✓ Branch 1 taken 147094 times.
✓ Branch 2 taken 65200 times.
✗ Branch 3 not taken.
212294 if (section_version >= 13 && section_version < 21)
17969 {
17970 set_bit(quest_rules,qr_BUGGY_BUGGY_SLASH_TRIGGERS,1);
17971 }
17972 //combo scripts
17973
2/2
✓ Branch 0 taken 147094 times.
✓ Branch 1 taken 65200 times.
212294 if(section_version>=14)
17974 {
17975
1/2
✓ Branch 0 taken 65200 times.
✗ Branch 1 not taken.
65200 if(!p_igetw(&temp_combo.script,f,true)) return qe_invalid;
17976
2/2
✓ Branch 0 taken 130400 times.
✓ Branch 1 taken 65200 times.
195600 for ( int32_t q = 0; q < 2; q++ )
17977 {
17978
1/2
✓ Branch 0 taken 130400 times.
✗ Branch 1 not taken.
130400 if(!p_igetl(&temp_combo.initd[q],f,true))
17979 {
17980 return qe_invalid;
17981 }
17982 130400 }
17983
17984 65200 }
17985
2/2
✓ Branch 0 taken 65200 times.
✓ Branch 1 taken 147094 times.
212294 if(section_version<14)
17986 {
17987 147094 temp_combo.script = 0;
17988
2/2
✓ Branch 0 taken 294188 times.
✓ Branch 1 taken 147094 times.
441282 for ( int32_t q = 0; q < 2; q++ )
17989 {
17990 294188 temp_combo.initd[q] = 0;
17991 294188 }
17992 147094 }
17993 //al_trace("Read combo script data\n");
17994
2/2
✓ Branch 0 taken 65200 times.
✓ Branch 1 taken 147094 times.
212294 if(section_version>=15)
17995 {
17996
1/2
✓ Branch 0 taken 65200 times.
✗ Branch 1 not taken.
65200 if(!p_igetl(&temp_combo.o_tile,f,true)) return qe_invalid;
17997
2/2
✓ Branch 0 taken 33577 times.
✓ Branch 1 taken 31623 times.
65200 if(!temp_combo.o_tile) temp_combo.o_tile = temp_combo.tile;
17998
1/2
✓ Branch 0 taken 65200 times.
✗ Branch 1 not taken.
65200 if(!p_getc(&temp_combo.cur_frame,f,true)) return qe_invalid;
17999
1/2
✓ Branch 0 taken 65200 times.
✗ Branch 1 not taken.
65200 if(!p_getc(&temp_combo.aclk,f,true)) return qe_invalid;
18000 65200 }
18001 else
18002 {
18003 147094 temp_combo.o_tile = temp_combo.tile;
18004 147094 temp_combo.cur_frame = 0;
18005 147094 temp_combo.aclk = 0;
18006 }
18007
2/2
✓ Branch 0 taken 65200 times.
✓ Branch 1 taken 147094 times.
212294 if(section_version>=17) //attribytes[4]
18008 {
18009
2/2
✓ Branch 0 taken 260800 times.
✓ Branch 1 taken 65200 times.
326000 for ( int32_t q = 4; q < 8; q++ ) //bump up attribytes...
18010 {
18011
1/2
✓ Branch 0 taken 260800 times.
✗ Branch 1 not taken.
260800 if(!p_getc(&temp_combo.attribytes[q],f,true))
18012 {
18013 return qe_invalid;
18014 }
18015 260800 }
18016
2/2
✓ Branch 0 taken 521600 times.
✓ Branch 1 taken 65200 times.
586800 for ( int32_t q = 0; q < 8; q++ ) //...and add attrishorts
18017 {
18018
1/2
✓ Branch 0 taken 521600 times.
✗ Branch 1 not taken.
521600 if(!p_igetw(&temp_combo.attrishorts[q],f,true))
18019 {
18020 return qe_invalid;
18021 }
18022 521600 }
18023
18024 65200 }
18025 else
18026 {
18027
2/2
✓ Branch 0 taken 588376 times.
✓ Branch 1 taken 147094 times.
735470 for ( int32_t q = 4; q < 8; q++ ) //bump up attribytes...
18028 {
18029 588376 temp_combo.attribytes[q] = 0;
18030 588376 }
18031
2/2
✓ Branch 0 taken 1176752 times.
✓ Branch 1 taken 147094 times.
1323846 for ( int32_t q = 0; q < 8; q++ ) //...and add attrishorts
18032 {
18033 1176752 temp_combo.attrishorts[q] = 0;
18034 1176752 }
18035 }
18036
2/2
✓ Branch 0 taken 65200 times.
✓ Branch 1 taken 147094 times.
212294 if(section_version<18) //upper bits for .walk
18037 {
18038 147094 temp_combo.walk |= 0xF0; //All on by default for old quests -E
18039 147094 }
18040
2/2
✓ Branch 0 taken 65200 times.
✓ Branch 1 taken 147094 times.
212294 if(section_version < 19)
18041 {
18042
2/2
✓ Branch 0 taken 588376 times.
✓ Branch 1 taken 147094 times.
735470 for(int32_t q = 0; q < 4; ++q)
18043 {
18044 588376 temp_combo.attributes[q] *= 10000L;
18045 588376 }
18046 147094 }
18047
18048
1/2
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
212294 if(version < 0x193)
18049 {
18050 for(int32_t q=0; q<11; q++)
18051 {
18052 if(!p_getc(&dummy,f,true))
18053 {
18054 return qe_invalid;
18055 }
18056 }
18057 }
18058
18059 //Goriya tiles were flipped around in 2.11 build 7. Compensate for the flip here. -DD
18060
2/6
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 212294 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
212294 if((version < 0x211)||((version == 0x211)&&(build<7)))
18061 {
18062 if(!get_bit(quest_rules,qr_NEWENEMYTILES))
18063 {
18064 switch(temp_combo.tile)
18065 {
18066 case 130:
18067 temp_combo.tile = 132;
18068 break;
18069
18070 case 131:
18071 temp_combo.tile = 133;
18072 break;
18073
18074 case 132:
18075 temp_combo.tile = 130;
18076 break;
18077
18078 case 133:
18079 temp_combo.tile = 131;
18080 break;
18081 }
18082 }
18083 }
18084
18085
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212294 times.
212294 if(section_version < 25)
18086 {
18087
2/2
✓ Branch 0 taken 1925 times.
✓ Branch 1 taken 210369 times.
212294 switch(temp_combo.type)
18088 {
18089 case cLOCKBLOCK: case cBOSSLOCKBLOCK:
18090
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1925 times.
1925 if(!(temp_combo.usrflags & cflag3))
18091 1925 temp_combo.attribytes[3] = WAV_DOOR;
18092 1925 temp_combo.usrflags &= ~cflag3;
18093 1925 break;
18094 }
18095 212294 }
18096
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212294 times.
212294 if(section_version < 26)
18097 {
18098
2/2
✓ Branch 0 taken 211937 times.
✓ Branch 1 taken 357 times.
212294 if(temp_combo.type == cARMOS)
18099 {
18100
1/2
✓ Branch 0 taken 357 times.
✗ Branch 1 not taken.
357 if(temp_combo.usrflags & cflag1)
18101 temp_combo.usrflags |= cflag3;
18102 357 }
18103 212294 }
18104
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 212294 times.
212294 if(section_version < 28)
18105 {
18106
2/2
✓ Branch 0 taken 1015 times.
✓ Branch 1 taken 211279 times.
212294 switch(temp_combo.type)
18107 {
18108 case cLOCKBLOCK: case cLOCKEDCHEST:
18109
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1015 times.
1015 if(temp_combo.usrflags & cflag7)
18110 temp_combo.usrflags |= cflag8;
18111 1015 else temp_combo.usrflags &= ~cflag8;
18112 1015 temp_combo.usrflags &= ~cflag7;
18113 1015 break;
18114 }
18115
2/2
✓ Branch 0 taken 50 times.
✓ Branch 1 taken 212244 times.
212294 switch(temp_combo.type)
18116 {
18117 case cCHEST: case cLOCKEDCHEST: case cBOSSCHEST:
18118 50 temp_combo.attrishorts[2] = -1;
18119 50 temp_combo.usrflags |= cflag7;
18120 50 break;
18121 }
18122 212294 }
18123
18124
2/4
✓ Branch 0 taken 212294 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 212294 times.
212294 if(keepdata==true && i>=start_combo)
18125 {
18126 212294 memcpy(&combobuf[i], &temp_combo, sizeof(temp_combo));
18127 212294 }
18128 212294 }
18129
18130
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 60 times.
60 if(keepdata==true)
18131 {
18132
2/6
✓ Branch 0 taken 60 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 60 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
60 if((version < 0x192)|| ((version == 0x192)&&(build<185)))
18133 {
18134 for(int32_t tmpcounter=0; tmpcounter<MAXCOMBOS; tmpcounter++)
18135 {
18136 if(combobuf[tmpcounter].type==cHOOKSHOTONLY)
18137 {
18138 combobuf[tmpcounter].type=cLADDERHOOKSHOT;
18139 }
18140 }
18141 }
18142
18143 //June 3 2012; ladder only is broken in 2.10 and allows the hookshot also. -Gleeok
18144
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 60 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
60 if(version == 0x210 && !is_zquest())
18145 {
18146 for(int32_t tmpcounter=0; tmpcounter<MAXCOMBOS; tmpcounter++)
18147 if(combobuf[tmpcounter].type == cLADDERONLY)
18148 combobuf[tmpcounter].type = cLADDERHOOKSHOT;
18149 }
18150
18151
1/2
✓ Branch 0 taken 60 times.
✗ Branch 1 not taken.
60 if(section_version<7)
18152 {
18153 for(int32_t tmpcounter=0; tmpcounter<MAXCOMBOS; tmpcounter++)
18154 {
18155 switch(combobuf[tmpcounter].type)
18156 {
18157 case cSLASH:
18158 combobuf[tmpcounter].type=cSLASHTOUCHY;
18159 break;
18160
18161 case cSLASHITEM:
18162 combobuf[tmpcounter].type=cSLASHITEMTOUCHY;
18163 break;
18164
18165 case cBUSH:
18166 combobuf[tmpcounter].type=cBUSHTOUCHY;
18167 break;
18168
18169 case cFLOWERS:
18170 combobuf[tmpcounter].type=cFLOWERSTOUCHY;
18171 break;
18172
18173 case cTALLGRASS:
18174 combobuf[tmpcounter].type=cTALLGRASSTOUCHY;
18175 break;
18176
18177 case cSLASHNEXT:
18178 combobuf[tmpcounter].type=cSLASHNEXTTOUCHY;
18179 break;
18180
18181 case cSLASHNEXTITEM:
18182 combobuf[tmpcounter].type=cSLASHNEXTITEMTOUCHY;
18183 break;
18184
18185 case cBUSHNEXT:
18186 combobuf[tmpcounter].type=cBUSHNEXTTOUCHY;
18187 break;
18188 }
18189 }
18190 }
18191
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 59 times.
60 if (section_version < 16)
18192 {
18193
2/2
✓ Branch 0 taken 3851520 times.
✓ Branch 1 taken 59 times.
3851579 for(int32_t tmpcounter=0; tmpcounter<MAXCOMBOS; tmpcounter++)
18194 {
18195
2/2
✓ Branch 0 taken 3848595 times.
✓ Branch 1 taken 2925 times.
3851520 if (combobuf[tmpcounter].type == cWATER)
18196 {
18197 2925 combobuf[tmpcounter].attributes[0] = 40000L;
18198 2925 }
18199 3851520 }
18200 59 }
18201
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 1 times.
60 if(!get_bit(quest_rules,qr_ALLOW_EDITING_COMBO_0))
18202 {
18203 1 combobuf[0].walk = 0xF0;
18204 1 combobuf[0].type = 0;
18205 1 combobuf[0].flag = 0;
18206 1 }
18207 60 }
18208
18209 //Now for the new combo alias reset
18210
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 60 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
60 if(section_version<2 && keepdata)
18211 {
18212 for(int32_t j=0; j<MAXCOMBOALIASES; j++)
18213 {
18214 combo_aliases[j].width = 0;
18215 combo_aliases[j].height = 0;
18216 combo_aliases[j].layermask = 0;
18217
18218 if(combo_aliases[j].combos != NULL)
18219 {
18220 delete[] combo_aliases[j].combos;
18221 }
18222
18223 if(combo_aliases[j].csets != NULL)
18224 {
18225 delete[] combo_aliases[j].csets;
18226 }
18227
18228 combo_aliases[j].combos = new word[1];
18229 combo_aliases[j].csets = new byte[1];
18230 combo_aliases[j].combos[0] = 0;
18231 combo_aliases[j].csets[0] = 0;
18232 }
18233 }
18234
18235
18236 60 setup_combo_animations();
18237 60 setup_combo_animations2();
18238 60 return 0;
18239 60 }
18240 15372 int32_t readcombo_loop(PACKFILE* f, word s_version, newcombo& temp_combo)
18241 {
18242 byte combo_has_flags;
18243
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15372 times.
15372 if(!p_getc(&combo_has_flags,f,true))
18244 return qe_invalid;
18245
18246 15372 temp_combo.clear();
18247
2/2
✓ Branch 0 taken 10649 times.
✓ Branch 1 taken 4723 times.
15372 if(combo_has_flags)
18248 {
18249
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 4723 times.
4723 if(combo_has_flags&CHAS_GENERAL)
18250 {
18251
1/2
✓ Branch 0 taken 4723 times.
✗ Branch 1 not taken.
4723 if(!p_igetl(&temp_combo.tile,f,true))
18252 {
18253 return qe_invalid;
18254 }
18255 4723 temp_combo.o_tile = temp_combo.tile;
18256
18257
1/2
✓ Branch 0 taken 4723 times.
✗ Branch 1 not taken.
4723 if(!p_getc(&temp_combo.flip,f,true))
18258 {
18259 return qe_invalid;
18260 }
18261
18262
1/2
✓ Branch 0 taken 4723 times.
✗ Branch 1 not taken.
4723 if(!p_getc(&temp_combo.walk,f,true))
18263 {
18264 return qe_invalid;
18265 }
18266
18267
1/2
✓ Branch 0 taken 4723 times.
✗ Branch 1 not taken.
4723 if(!p_getc(&temp_combo.type,f,true))
18268 {
18269 return qe_invalid;
18270 }
18271
18272
1/2
✓ Branch 0 taken 4723 times.
✗ Branch 1 not taken.
4723 if(!p_getc(&temp_combo.flag,f,true))
18273 {
18274 return qe_invalid;
18275 }
18276
18277
1/2
✓ Branch 0 taken 4723 times.
✗ Branch 1 not taken.
4723 if(!p_getc(&temp_combo.csets,f,true))
18278 {
18279 return qe_invalid;
18280 }
18281 4723 }
18282
2/2
✓ Branch 0 taken 4722 times.
✓ Branch 1 taken 1 times.
4723 if(combo_has_flags&CHAS_SCRIPT)
18283 {
18284
2/2
✓ Branch 0 taken 11 times.
✓ Branch 1 taken 1 times.
12 for ( int32_t q = 0; q < 11; q++ )
18285 {
18286
1/2
✓ Branch 0 taken 11 times.
✗ Branch 1 not taken.
11 if(!p_getc(&temp_combo.label[q],f,true))
18287 {
18288 return qe_invalid;
18289 }
18290 11 }
18291
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if(!p_igetw(&temp_combo.script,f,true)) return qe_invalid;
18292
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
3 for ( int32_t q = 0; q < 2; q++ )
18293 {
18294
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 if(!p_igetl(&temp_combo.initd[q],f,true))
18295 {
18296 return qe_invalid;
18297 }
18298 2 }
18299 1 }
18300
2/2
✓ Branch 0 taken 3991 times.
✓ Branch 1 taken 732 times.
4723 if(combo_has_flags&CHAS_ANIM)
18301 {
18302
1/2
✓ Branch 0 taken 732 times.
✗ Branch 1 not taken.
732 if(!p_getc(&temp_combo.frames,f,true))
18303 {
18304 return qe_invalid;
18305 }
18306
18307
1/2
✓ Branch 0 taken 732 times.
✗ Branch 1 not taken.
732 if(!p_getc(&temp_combo.speed,f,true))
18308 {
18309 return qe_invalid;
18310 }
18311
18312
1/2
✓ Branch 0 taken 732 times.
✗ Branch 1 not taken.
732 if(!p_igetw(&temp_combo.nextcombo,f,true))
18313 {
18314 return qe_invalid;
18315 }
18316
18317
1/2
✓ Branch 0 taken 732 times.
✗ Branch 1 not taken.
732 if(!p_getc(&temp_combo.nextcset,f,true))
18318 {
18319 return qe_invalid;
18320 }
18321
18322
1/2
✓ Branch 0 taken 732 times.
✗ Branch 1 not taken.
732 if(!p_getc(&temp_combo.skipanim,f,true))
18323 {
18324 return qe_invalid;
18325 }
18326
18327
1/2
✓ Branch 0 taken 732 times.
✗ Branch 1 not taken.
732 if(!p_getc(&temp_combo.skipanimy,f,true))
18328 {
18329 return qe_invalid;
18330 }
18331
18332
1/2
✓ Branch 0 taken 732 times.
✗ Branch 1 not taken.
732 if(!p_getc(&temp_combo.animflags,f,true))
18333 {
18334 return qe_invalid;
18335 }
18336 732 }
18337
2/2
✓ Branch 0 taken 4099 times.
✓ Branch 1 taken 624 times.
4723 if(combo_has_flags&CHAS_ATTRIB)
18338 {
18339
2/2
✓ Branch 0 taken 2496 times.
✓ Branch 1 taken 624 times.
3120 for ( int32_t q = 0; q < 4; q++ )
18340 {
18341
1/2
✓ Branch 0 taken 2496 times.
✗ Branch 1 not taken.
2496 if(!p_igetl(&temp_combo.attributes[q],f,true))
18342 {
18343 return qe_invalid;
18344 }
18345 2496 }
18346
2/2
✓ Branch 0 taken 4992 times.
✓ Branch 1 taken 624 times.
5616 for ( int32_t q = 0; q < 8; q++ )
18347 {
18348
1/2
✓ Branch 0 taken 4992 times.
✗ Branch 1 not taken.
4992 if(!p_getc(&temp_combo.attribytes[q],f,true))
18349 {
18350 return qe_invalid;
18351 }
18352 4992 }
18353
2/2
✓ Branch 0 taken 4992 times.
✓ Branch 1 taken 624 times.
5616 for ( int32_t q = 0; q < 8; q++ )
18354 {
18355
1/2
✓ Branch 0 taken 4992 times.
✗ Branch 1 not taken.
4992 if(!p_igetw(&temp_combo.attrishorts[q],f,true))
18356 {
18357 return qe_invalid;
18358 }
18359 4992 }
18360 624 }
18361
2/2
✓ Branch 0 taken 4529 times.
✓ Branch 1 taken 194 times.
4723 if(combo_has_flags&CHAS_FLAG)
18362 {
18363
1/2
✓ Branch 0 taken 194 times.
✗ Branch 1 not taken.
194 if(!p_igetl(&temp_combo.usrflags,f,true))
18364 {
18365 return qe_invalid;
18366 }
18367
1/2
✓ Branch 0 taken 194 times.
✗ Branch 1 not taken.
194 if(!p_igetw(&temp_combo.genflags,f,true))
18368 {
18369 return qe_invalid;
18370 }
18371 194 }
18372
2/2
✓ Branch 0 taken 4696 times.
✓ Branch 1 taken 27 times.
4723 if(combo_has_flags&CHAS_TRIG)
18373 {
18374
2/2
✓ Branch 0 taken 81 times.
✓ Branch 1 taken 27 times.
108 for ( int32_t q = 0; q < 3; q++ )
18375 {
18376
1/2
✓ Branch 0 taken 81 times.
✗ Branch 1 not taken.
81 if(!p_igetl(&temp_combo.triggerflags[q],f,true))
18377 {
18378 return qe_invalid;
18379 }
18380 81 }
18381
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_igetl(&temp_combo.triggerlevel,f,true))
18382 {
18383 return qe_invalid;
18384 }
18385
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_getc(&temp_combo.triggerbtn,f,true))
18386 {
18387 return qe_invalid;
18388 }
18389
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_getc(&temp_combo.triggeritem,f,true))
18390 {
18391 return qe_invalid;
18392 }
18393
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_getc(&temp_combo.trigtimer,f,true))
18394 {
18395 return qe_invalid;
18396 }
18397
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_getc(&temp_combo.trigsfx,f,true))
18398 {
18399 return qe_invalid;
18400 }
18401
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_igetl(&temp_combo.trigchange,f,true))
18402 {
18403 return qe_invalid;
18404 }
18405
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_igetw(&temp_combo.trigprox,f,true))
18406 {
18407 return qe_invalid;
18408 }
18409
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_getc(&temp_combo.trigctr,f,true))
18410 {
18411 return qe_invalid;
18412 }
18413
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_igetl(&temp_combo.trigctramnt,f,true))
18414 {
18415 return qe_invalid;
18416 }
18417
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_getc(&temp_combo.triglbeam,f,true))
18418 {
18419 return qe_invalid;
18420 }
18421
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_getc(&temp_combo.trigcschange,f,true))
18422 {
18423 return qe_invalid;
18424 }
18425
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_igetw(&temp_combo.spawnitem,f,true))
18426 {
18427 return qe_invalid;
18428 }
18429
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_igetw(&temp_combo.spawnenemy,f,true))
18430 {
18431 return qe_invalid;
18432 }
18433
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_getc(&temp_combo.exstate,f,true))
18434 {
18435 return qe_invalid;
18436 }
18437
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_igetl(&temp_combo.spawnip,f,true))
18438 {
18439 return qe_invalid;
18440 }
18441
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_getc(&temp_combo.trigcopycat,f,true))
18442 {
18443 return qe_invalid;
18444 }
18445
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_getc(&temp_combo.trigcooldown,f,true))
18446 {
18447 return qe_invalid;
18448 }
18449
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 27 times.
27 if(s_version >= 35)
18450 {
18451
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_igetw(&temp_combo.prompt_cid,f,true))
18452 {
18453 return qe_invalid;
18454 }
18455
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_getc(&temp_combo.prompt_cs,f,true))
18456 {
18457 return qe_invalid;
18458 }
18459
1/2
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
27 if(!p_igetw(&temp_combo.prompt_x,f,true))
18460 {
18461 return qe_invalid;
18462 }
18463
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 27 times.
27 if(!p_igetw(&temp_combo.prompt_y,f,true))
18464 {
18465 return qe_invalid;
18466 }
18467 27 }
18468 27 }
18469
2/2
✓ Branch 0 taken 4711 times.
✓ Branch 1 taken 12 times.
4723 if(combo_has_flags&CHAS_LIFT)
18470 {
18471
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_igetw(&temp_combo.liftcmb,f,true))
18472 return qe_invalid;
18473
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&temp_combo.liftcs,f,true))
18474 return qe_invalid;
18475
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_igetw(&temp_combo.liftundercmb,f,true))
18476 return qe_invalid;
18477
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&temp_combo.liftundercs,f,true))
18478 return qe_invalid;
18479
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&temp_combo.liftdmg,f,true))
18480 return qe_invalid;
18481
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&temp_combo.liftlvl,f,true))
18482 return qe_invalid;
18483
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&temp_combo.liftitm,f,true))
18484 return qe_invalid;
18485
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&temp_combo.liftflags,f,true))
18486 return qe_invalid;
18487
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&temp_combo.liftgfx,f,true))
18488 return qe_invalid;
18489
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&temp_combo.liftsprite,f,true))
18490 return qe_invalid;
18491
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&temp_combo.liftsfx,f,true))
18492 return qe_invalid;
18493
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_igetw(&temp_combo.liftbreaksprite,f,true))
18494 return qe_invalid;
18495
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&temp_combo.liftbreaksfx,f,true))
18496 return qe_invalid;
18497
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if(s_version >= 34)
18498 {
18499
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&temp_combo.lifthei,f,true))
18500 return qe_invalid;
18501
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
12 if(!p_getc(&temp_combo.lifttime,f,true))
18502 return qe_invalid;
18503 12 }
18504 12 }
18505 4723 }
18506 15372 return 0;
18507 15372 }
18508 63 int32_t readcombos(PACKFILE *f, zquestheader *Header, word version, word build, word start_combo, word max_combos, bool keepdata)
18509 {
18510 63 word section_version=0;
18511 63 word section_cversion=0;
18512 63 word combos_used=0;
18513 int32_t dummy;
18514 byte padding;
18515 63 newcombo temp_combo;
18516
18517 63 reset_combo_animations();
18518 63 reset_combo_animations2();
18519 63 init_combo_classes();
18520
18521
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true) //reset combos
18522 {
18523
2/2
✓ Branch 0 taken 4112640 times.
✓ Branch 1 taken 63 times.
4112703 for(int32_t q = start_combo; q < start_combo+max_combos; ++q)
18524 4112640 combobuf[q].clear();
18525 63 }
18526
18527
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(version > 0x192) //Version info
18528 {
18529
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&section_version,f,true))
18530 {
18531 return qe_invalid;
18532 }
18533 63 FFCore.quest_format[vCombos] = section_version;
18534
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&section_cversion,f,true))
18535 {
18536 return qe_invalid;
18537 }
18538
18539 //section size
18540
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy,f,true))
18541 {
18542 return qe_invalid;
18543 }
18544 63 }
18545
18546
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 60 times.
63 if(section_version > 32) //Cleanup time!
18547 {
18548
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
3 if(!p_igetw(&combos_used,f,true))
18549 {
18550 return qe_invalid;
18551 }
18552
2/2
✓ Branch 0 taken 15372 times.
✓ Branch 1 taken 3 times.
15375 for(int32_t i=0; i<combos_used; i++)
18553 {
18554 15372 auto ret = readcombo_loop(f,section_version,temp_combo);
18555
1/2
✓ Branch 0 taken 15372 times.
✗ Branch 1 not taken.
15372 if(ret) return ret;
18556
2/4
✓ Branch 0 taken 15372 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 15372 times.
15372 if(keepdata==true && i>=start_combo)
18557 15372 memcpy(&combobuf[i], &temp_combo, sizeof(temp_combo));
18558 15372 }
18559 3 }
18560 else //Call the old function for all old versions
18561 {
18562 60 auto ret = readcombos_old(section_version,f,Header,version,build,start_combo,max_combos,keepdata);
18563
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 60 times.
60 if(ret) return ret; //error, end read
18564 }
18565
18566
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(keepdata && false/*section_version < 34*/)
18567 {
18568 for(int32_t i=start_combo; i<combos_used; i++)
18569 {
18570 newcombo& cmb = combobuf[i];
18571 //Do anything to 'cmb' needed for version handling
18572 }
18573 }
18574
18575
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true)
18576 {
18577
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(!get_bit(quest_rules,qr_ALLOW_EDITING_COMBO_0))
18578 {
18579 4 combobuf[0].walk = 0xF0;
18580 4 combobuf[0].type = 0;
18581 4 combobuf[0].flag = 0;
18582 4 }
18583 63 }
18584
18585 63 setup_combo_animations();
18586 63 setup_combo_animations2();
18587 63 return 0;
18588 63 }
18589
18590 63 int32_t readcomboaliases(PACKFILE *f, zquestheader *Header, word version, word build, bool keepdata)
18591 {
18592 //these are here to bypass compiler warnings about unused arguments
18593 63 Header=Header;
18594 63 version=version;
18595 63 build=build;
18596
18597 int32_t dummy;
18598 63 word sversion=0, c_sversion;
18599
18600 //section version info
18601
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(!p_igetw(&sversion,f,true))
18602 {
18603 return qe_invalid;
18604 }
18605
18606 63 FFCore.quest_format[vComboAliases] = sversion;
18607
18608 //al_trace("Combo aliases version %d\n", sversion);
18609
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&c_sversion,f,true))
18610 {
18611 return qe_invalid;
18612 }
18613
18614 //section size
18615
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy,f,true))
18616 {
18617 return qe_invalid;
18618 }
18619
18620 63 int32_t max_num_combo_aliases = MAXCOMBOALIASES;
18621
18622
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(sversion < 3) // max saved combo alias' upped from 256 to 2048.
18623 {
18624 59 max_num_combo_aliases = MAX250COMBOALIASES;
18625 59 }
18626
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(sversion < 2) // max saved combo alias' upped from 256 to 2048.
18627 {
18628 max_num_combo_aliases = OLDMAXCOMBOALIASES;
18629 }
18630
18631
2/2
✓ Branch 0 taken 153600 times.
✓ Branch 1 taken 63 times.
153663 for(int32_t j=0; j<max_num_combo_aliases; j++)
18632 {
18633 byte width,height,mask,tempcset;
18634 int32_t count;
18635 word tempword;
18636 byte tempbyte;
18637
18638
1/2
✓ Branch 0 taken 153600 times.
✗ Branch 1 not taken.
153600 if(!p_igetw(&tempword,f,true))
18639 {
18640 return qe_invalid;
18641 }
18642
18643
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 153600 times.
153600 if(keepdata)
18644 {
18645 153600 combo_aliases[j].combo = tempword;
18646 153600 }
18647
18648
1/2
✓ Branch 0 taken 153600 times.
✗ Branch 1 not taken.
153600 if(!p_getc(&tempbyte,f,true))
18649 {
18650 return qe_invalid;
18651 }
18652
18653
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 153600 times.
153600 if(keepdata)
18654 {
18655 153600 combo_aliases[j].cset = tempbyte;
18656 153600 }
18657
18658
1/2
✓ Branch 0 taken 153600 times.
✗ Branch 1 not taken.
153600 if(!p_getc(&width,f,true))
18659 {
18660 return qe_invalid;
18661 }
18662
18663
1/2
✓ Branch 0 taken 153600 times.
✗ Branch 1 not taken.
153600 if(!p_getc(&height,f,true))
18664 {
18665 return qe_invalid;
18666 }
18667
18668
1/2
✓ Branch 0 taken 153600 times.
✗ Branch 1 not taken.
153600 if(!p_getc(&mask,f,true))
18669 {
18670 return qe_invalid;
18671 }
18672
18673 153600 count=(width+1)*(height+1)*(comboa_lmasktotal(mask)+1);
18674
18675
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 153600 times.
153600 if(keepdata)
18676 {
18677
1/2
✓ Branch 0 taken 153600 times.
✗ Branch 1 not taken.
153600 if(combo_aliases[j].combos != NULL)
18678 {
18679
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 153600 times.
153600 delete[] combo_aliases[j].combos;
18680 153600 }
18681
18682
1/2
✓ Branch 0 taken 153600 times.
✗ Branch 1 not taken.
153600 if(combo_aliases[j].csets != NULL)
18683 {
18684
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 153600 times.
153600 delete[] combo_aliases[j].csets;
18685 153600 }
18686
18687 153600 combo_aliases[j].width = width;
18688 153600 combo_aliases[j].height = height;
18689 153600 combo_aliases[j].layermask = mask;
18690 153600 combo_aliases[j].combos = new word[count];
18691 153600 combo_aliases[j].csets = new byte[count];
18692 153600 }
18693
18694
2/2
✓ Branch 0 taken 156717 times.
✓ Branch 1 taken 153600 times.
310317 for(int32_t k=0; k<count; k++)
18695 {
18696
1/2
✓ Branch 0 taken 156717 times.
✗ Branch 1 not taken.
156717 if(!p_igetw(&tempword,f,true))
18697 {
18698 return qe_invalid;
18699 }
18700
18701
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 156717 times.
156717 if(keepdata)
18702 {
18703 156717 combo_aliases[j].combos[k] = tempword;
18704 156717 }
18705 156717 }
18706
18707
2/2
✓ Branch 0 taken 156717 times.
✓ Branch 1 taken 153600 times.
310317 for(int32_t k=0; k<count; k++)
18708 {
18709
1/2
✓ Branch 0 taken 156717 times.
✗ Branch 1 not taken.
156717 if(!p_getc(&tempcset,f,true))
18710 {
18711 return qe_invalid;
18712 }
18713
18714
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 156717 times.
156717 if(keepdata)
18715 {
18716 156717 combo_aliases[j].csets[k] = tempcset;
18717 156717 }
18718 156717 }
18719 153600 }
18720
18721 63 word num_combo_pools = 0;
18722
2/2
✓ Branch 0 taken 60 times.
✓ Branch 1 taken 3 times.
63 if(sversion >= 4)
18723 {
18724
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
3 if(!p_igetw(&num_combo_pools,f,true))
18725 {
18726 return qe_invalid;
18727 }
18728 3 }
18729
18730
2/2
✓ Branch 0 taken 516096 times.
✓ Branch 1 taken 63 times.
516159 for(combo_pool& pool : combo_pools)
18731 {
18732 516096 pool.clear();
18733 }
18734
18735 63 combo_pool temp_cpool;
18736
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 63 times.
72 for(word cp = 0; cp < num_combo_pools; ++cp)
18737 {
18738 9 int32_t num_combos_in_pool = 0;
18739
2/4
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
9 if(!p_igetl(&num_combos_in_pool,f,true))
18740 {
18741 return qe_invalid;
18742 }
18743
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 if(num_combos_in_pool < 1) continue; //nothing to read
18744
18745
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 temp_cpool.clear();
18746
18747 int32_t cp_cid; int8_t cp_cs; word cp_quant;
18748
2/2
✓ Branch 0 taken 39 times.
✓ Branch 1 taken 9 times.
48 for(auto q = 0; q < num_combos_in_pool; ++q)
18749 {
18750
2/4
✓ Branch 0 taken 39 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 39 times.
✗ Branch 3 not taken.
39 if(!p_igetl(&cp_cid,f,true))
18751 {
18752 return qe_invalid;
18753 }
18754
2/4
✓ Branch 0 taken 39 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 39 times.
✗ Branch 3 not taken.
39 if(!p_getc(&cp_cs,f,true))
18755 {
18756 return qe_invalid;
18757 }
18758
2/4
✓ Branch 0 taken 39 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 39 times.
✗ Branch 3 not taken.
39 if(!p_igetw(&cp_quant,f,true))
18759 {
18760 return qe_invalid;
18761 }
18762
1/2
✓ Branch 0 taken 39 times.
✗ Branch 1 not taken.
39 temp_cpool.add(cp_cid, cp_cs, cp_quant);
18763 39 }
18764
18765
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 if(keepdata)
18766 {
18767
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 combo_pools[cp] = temp_cpool;
18768 9 }
18769 9 }
18770
18771 63 return 0;
18772 63 }
18773
18774 63 int32_t readcolordata(PACKFILE *f, miscQdata *Misc, word version, word build, word start_cset, word max_csets, bool keepdata)
18775 {
18776 //these are here to bypass compiler warnings about unused arguments
18777
18778 //THE *48 REFERS TO EACH CSET BEING 16 COLORS with 3 VALUES OF RGB (3*16 is 48)
18779 //Capitalized cause it'll save you a headache. -Deedee
18780 63 start_cset=start_cset;
18781 63 max_csets=max_csets;
18782 63 word s_version=0;
18783
18784 miscQdata temp_misc;
18785 63 memcpy(&temp_misc, Misc, sizeof(temp_misc));
18786
18787 byte temp_colordata[48];
18788 char temp_palname[PALNAMESIZE];
18789
18790 int32_t dummy;
18791 word palcycles;
18792
18793
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(version > 0x192)
18794 {
18795 //section version info
18796
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_version,f,true))
18797 {
18798 return qe_invalid;
18799 }
18800
18801 63 FFCore.quest_format[vCSets] = s_version;
18802
18803 //al_trace("Color data version %d\n", s_version);
18804
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&dummy,f,true))
18805 {
18806 return qe_invalid;
18807 }
18808
18809 //section size
18810
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy,f,true))
18811 {
18812 return qe_invalid;
18813 }
18814 63 }
18815
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if (s_version < 5)
18816 {
18817
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 59 times.
✗ Branch 3 not taken.
59 bool RealOldVerion = ((version < 0x192)||((version == 0x192)&&(build<73)));
18818
18819 //finally... section data
18820 59 int32_t q = 0;
18821 59 int32_t p = -15;
18822
2/2
✓ Branch 0 taken 14160 times.
✓ Branch 1 taken 59 times.
14219 for(int32_t i=0; i<oldpdTOTAL; ++i)
18823 {
18824 14160 memset(temp_colordata, 0, 48);
18825
18826
1/2
✓ Branch 0 taken 14160 times.
✗ Branch 1 not taken.
14160 if(!pfread(temp_colordata,48,f,true))
18827 {
18828 return qe_invalid;
18829 }
18830
18831
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 14160 times.
14160 if(keepdata==true)
18832 {
18833 14160 memcpy(&colordata[q*48], temp_colordata, 48);
18834 14160 }
18835 14160 ++q;
18836
7/8
✓ Branch 0 taken 13216 times.
✓ Branch 1 taken 944 times.
✓ Branch 2 taken 1003 times.
✓ Branch 3 taken 12213 times.
✓ Branch 4 taken 118 times.
✓ Branch 5 taken 885 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 118 times.
14160 if (p > 0 && (p%13)==12 && (i < oldpoSPRITE || !RealOldVerion)) //It's > 0 instead of >= 0 because it should append
18837 {
18838
1/2
✓ Branch 0 taken 1003 times.
✗ Branch 1 not taken.
1003 if (s_version < 5) //Bumping up the size of level palettes
18839 {
18840
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1003 times.
1003 if(keepdata==true)
18841 {
18842 1003 memcpy(&colordata[(q)*48], &colordata[1*48], 48);
18843 1003 memcpy(&colordata[(q+1)*48], &colordata[5*48], 48);
18844 1003 memcpy(&colordata[(q+2)*48], &colordata[7*48], 48);
18845 1003 memcpy(&colordata[(q+3)*48], &colordata[8*48], 48);
18846 1003 }
18847 1003 q+=4;
18848 1003 }
18849 else
18850 {
18851 for(int m = 0; m < 4; ++m)
18852 {
18853 memset(temp_colordata, 0, 48);
18854 if(!pfread(temp_colordata,48,f,true))
18855 {
18856 return qe_invalid;
18857 }
18858 if(keepdata==true)
18859 {
18860 memcpy(&colordata[q*48], temp_colordata, 48);
18861 }
18862 ++q;
18863 }
18864 }
18865 1003 }
18866 14160 ++p;
18867 14160 }
18868
18869
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(RealOldVerion)
18870 {
18871 if(keepdata==true)
18872 {
18873 memcpy(colordata+(poSPRITE255*48), colordata+((q-30)*48), 30*16*3);
18874 memset(colordata+((q-30)*48), 0, ((poSPRITE255-(q-30))*48));
18875 memcpy(colordata+((poSPRITE255+11)*48), colordata+((poSPRITE255+10)*48), 48);
18876 memcpy(colordata+((poSPRITE255+10)*48), colordata+((poSPRITE255+9)*48), 48);
18877 memcpy(colordata+((poSPRITE255+9)*48), colordata+((poSPRITE255+8)*48), 48);
18878 memset(colordata+((poSPRITE255+8)*48), 0, 48);
18879 }
18880 }
18881 else
18882 {
18883 59 memset(temp_colordata, 0, 48);
18884
18885
2/2
✓ Branch 0 taken 184847 times.
✓ Branch 1 taken 59 times.
184906 for(int32_t i=0; i<newpdTOTAL-oldpdTOTAL; ++i)
18886 {
18887
1/2
✓ Branch 0 taken 184847 times.
✗ Branch 1 not taken.
184847 if(!pfread(temp_colordata,48,f,true))
18888 {
18889 return qe_invalid;
18890 }
18891
18892
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 184847 times.
184847 if(keepdata==true)
18893 {
18894 184847 memcpy(&colordata[q*48], temp_colordata, 48);
18895 184847 }
18896 184847 ++q;
18897
6/8
✓ Branch 0 taken 184847 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 14219 times.
✓ Branch 3 taken 170628 times.
✓ Branch 4 taken 118 times.
✓ Branch 5 taken 14101 times.
✓ Branch 6 taken 118 times.
✗ Branch 7 not taken.
184847 if (p > 0 && (p%13)==12 && (i < (newpoSPRITE-oldpdTOTAL) || (s_version >= 4))) //It's > 0 instead of >= 0 because it should append
18898 {
18899
1/2
✓ Branch 0 taken 14219 times.
✗ Branch 1 not taken.
14219 if (s_version < 5) //Bumping up the size of level palettes
18900 {
18901
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 14219 times.
14219 if(keepdata==true)
18902 {
18903 14219 memcpy(&colordata[(q)*48], &colordata[1*48], 48);
18904 14219 memcpy(&colordata[(q+1)*48], &colordata[5*48], 48);
18905 14219 memcpy(&colordata[(q+2)*48], &colordata[7*48], 48);
18906 14219 memcpy(&colordata[(q+3)*48], &colordata[8*48], 48);
18907 14219 }
18908 14219 q+=4;
18909 14219 }
18910 else
18911 {
18912 for(int m = 0; m < 4; ++m)
18913 {
18914 memset(temp_colordata, 0, 48);
18915 if(!pfread(temp_colordata,48,f,true))
18916 {
18917 return qe_invalid;
18918 }
18919 if(keepdata==true)
18920 {
18921 memcpy(&colordata[q*48], temp_colordata, 48);
18922 }
18923 ++q;
18924 }
18925 }
18926 14219 }
18927 184847 ++p;
18928 184847 }
18929
18930
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 if(s_version < 4)
18931 {
18932 if(keepdata==true)
18933 {
18934 memcpy(colordata+(poSPRITE255*48), colordata+((q-30)*48), 30*16*3);
18935 memset(colordata+((q-30)*48), 0, ((poSPRITE255-(q-30))*48));
18936 }
18937 }
18938 else
18939 {
18940
2/2
✓ Branch 0 taken 196352 times.
✓ Branch 1 taken 59 times.
196411 for(int32_t i=0; i<newerpdTOTAL-newpdTOTAL; ++i)
18941 {
18942
1/2
✓ Branch 0 taken 196352 times.
✗ Branch 1 not taken.
196352 if(!pfread(temp_colordata,48,f,true))
18943 {
18944 return qe_invalid;
18945 }
18946
18947
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 196352 times.
196352 if(keepdata==true)
18948 {
18949 196352 memcpy(&colordata[q*48], temp_colordata, 48);
18950 196352 }
18951 196352 ++q;
18952
5/6
✓ Branch 0 taken 196352 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 15104 times.
✓ Branch 3 taken 181248 times.
✓ Branch 4 taken 118 times.
✓ Branch 5 taken 14986 times.
196352 if (p > 0 && (p%13)==12 && i < newerpoSPRITE-newpdTOTAL) //It's > 0 instead of >= 0 because it should append
18953 {
18954
1/2
✓ Branch 0 taken 14986 times.
✗ Branch 1 not taken.
14986 if (s_version < 5) //Bumping up the size of level palettes
18955 {
18956
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 14986 times.
14986 if(keepdata==true)
18957 {
18958 14986 memcpy(&colordata[(q)*48], &colordata[1*48], 48);
18959 14986 memcpy(&colordata[(q+1)*48], &colordata[5*48], 48);
18960 14986 memcpy(&colordata[(q+2)*48], &colordata[7*48], 48);
18961 14986 memcpy(&colordata[(q+3)*48], &colordata[8*48], 48);
18962 14986 }
18963 14986 q+=4;
18964 14986 }
18965 else
18966 {
18967 for(int m = 0; m < 4; ++m)
18968 {
18969 memset(temp_colordata, 0, 48);
18970 if(!pfread(temp_colordata,48,f,true))
18971 {
18972 return qe_invalid;
18973 }
18974 if(keepdata==true)
18975 {
18976 memcpy(&colordata[q*48], temp_colordata, 48);
18977 }
18978 ++q;
18979 }
18980 }
18981 14986 }
18982 196352 ++p;
18983 196352 }
18984
18985 //By this point, q should be about equal to pdTOTAL255. If it isn't, I've fucked up. -Deedee
18986 }
18987 }
18988 59 }
18989 else
18990 {
18991
2/2
✓ Branch 0 taken 34996 times.
✓ Branch 1 taken 4 times.
35000 for(int32_t i=0; i<pdTOTAL255; ++i)
18992 {
18993 34996 memset(temp_colordata, 0, 48);
18994
18995
1/2
✓ Branch 0 taken 34996 times.
✗ Branch 1 not taken.
34996 if(!pfread(temp_colordata,48,f,true))
18996 {
18997 return qe_invalid;
18998 }
18999
19000
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 34996 times.
34996 if(keepdata==true)
19001 {
19002 34996 memcpy(&colordata[i*48], temp_colordata, 48);
19003 34996 }
19004 34996 }
19005 }
19006
19007
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((version < 0x192)||((version == 0x192)&&(build<76)))
19008 {
19009 if(keepdata==true)
19010 {
19011 init_palnames();
19012 }
19013 }
19014 else
19015 {
19016 63 int32_t palnamestoread = 0;
19017
19018
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version < 3)
19019 palnamestoread = OLDMAXLEVELS;
19020 else
19021 63 palnamestoread = 512;
19022
19023
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 63 times.
32319 for(int32_t i=0; i<palnamestoread; ++i)
19024 {
19025 32256 memset(temp_palname, 0, PALNAMESIZE);
19026
19027
1/2
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
32256 if(!pfread(temp_palname,PALNAMESIZE,f,true))
19028 {
19029 return qe_invalid;
19030 }
19031
19032
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 32256 times.
32256 if(keepdata==true)
19033 {
19034 32256 memcpy(palnames[i], temp_palname, PALNAMESIZE);
19035 32256 }
19036 32256 }
19037
19038
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata)
19039 {
19040
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 for(int32_t i=palnamestoread; i<MAXLEVELS; i++)
19041 {
19042 memset(palnames[i], 0, PALNAMESIZE);
19043 }
19044 63 }
19045 }
19046
19047
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(version > 0x192)
19048 {
19049
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<256; i++)
19050 {
19051
2/2
✓ Branch 0 taken 48384 times.
✓ Branch 1 taken 16128 times.
64512 for(int32_t j=0; j<3; j++)
19052 {
19053 48384 temp_misc.cycles[i][j].first=0;
19054 48384 temp_misc.cycles[i][j].count=0;
19055 48384 temp_misc.cycles[i][j].speed=0;
19056 48384 }
19057 16128 }
19058
19059
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&palcycles,f,true))
19060 {
19061 return qe_invalid;
19062 }
19063
19064
2/2
✓ Branch 0 taken 2508 times.
✓ Branch 1 taken 63 times.
2571 for(int32_t i=0; i<palcycles; i++)
19065 {
19066
2/2
✓ Branch 0 taken 7524 times.
✓ Branch 1 taken 2508 times.
10032 for(int32_t j=0; j<3; j++)
19067 {
19068
1/2
✓ Branch 0 taken 7524 times.
✗ Branch 1 not taken.
7524 if(!p_getc(&temp_misc.cycles[i][j].first,f,true))
19069 {
19070 return qe_invalid;
19071 }
19072 7524 }
19073
19074
2/2
✓ Branch 0 taken 7524 times.
✓ Branch 1 taken 2508 times.
10032 for(int32_t j=0; j<3; j++)
19075 {
19076
1/2
✓ Branch 0 taken 7524 times.
✗ Branch 1 not taken.
7524 if(!p_getc(&temp_misc.cycles[i][j].count,f,true))
19077 {
19078 return qe_invalid;
19079 }
19080 7524 }
19081
19082
2/2
✓ Branch 0 taken 7524 times.
✓ Branch 1 taken 2508 times.
10032 for(int32_t j=0; j<3; j++)
19083 {
19084
1/2
✓ Branch 0 taken 7524 times.
✗ Branch 1 not taken.
7524 if(!p_getc(&temp_misc.cycles[i][j].speed,f,true))
19085 {
19086 return qe_invalid;
19087 }
19088 7524 }
19089 2508 }
19090
19091
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true)
19092 {
19093 63 memcpy(Misc, &temp_misc, sizeof(temp_misc));
19094 63 }
19095 63 }
19096
19097 63 return 0;
19098 63 }
19099
19100 63 int32_t readtiles(PACKFILE *f, tiledata *buf, zquestheader *Header, word version, word build, word start_tile, int32_t max_tiles, bool from_init, bool keepdata)
19101 {
19102 63 int32_t tiles_used=0;
19103 63 word section_version = 0;
19104 63 word section_cversion = 0;
19105 63 int32_t section_size= 0;
19106 63 byte *temp_tile = new byte[tilesize(tf32Bit)];
19107
19108 //Tile Expansion
19109 //if ( version >= 0x254 && build >= 41 )
19110
3/4
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 59 times.
63 if (version < 0x254 && build < 41)
19111 {
19112 //al_trace("Build was < 41 when reading tiles\n");
19113 59 max_tiles = ZC250MAXTILES;
19114 59 }
19115
19116 //al_trace("Max Tiles: %d\n", max_tiles);
19117
19118
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if(Header!=NULL&&(!Header->data_flags[ZQ_TILES]&&!from_init)) //keep for old quests
19119 {
19120 if(keepdata==true)
19121 {
19122 if(!init_tiles(true, Header))
19123 {
19124 al_trace("Unable to initialize tiles\n");
19125 }
19126 }
19127
19128 delete[] temp_tile;
19129 temp_tile=NULL;
19130 return 0;
19131 }
19132 else
19133 {
19134
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(version > 0x192)
19135 {
19136 //section version info
19137
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&section_version,f,true))
19138 {
19139 delete[] temp_tile;
19140 return qe_invalid;
19141 }
19142
19143 63 FFCore.quest_format[vTiles] = section_version;
19144
19145
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&section_cversion,f,true))
19146 {
19147 delete[] temp_tile;
19148 return qe_invalid;
19149 }
19150
19151 //section size
19152
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&section_size,f,true))
19153 {
19154 delete[] temp_tile;
19155 return qe_invalid;
19156 }
19157 63 }
19158
19159 //if ( build < 41 )
19160 //{
19161 // tiles_used = ZC250MAXTILES;
19162 //}
19163
19164
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(version < 0x174)
19165 {
19166 tiles_used=TILES_PER_PAGE*4;
19167 } //no expanded tile space
19168
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 else if(version < 0x191)
19169 {
19170 tiles_used=OLDMAXTILES;
19171 }
19172 else
19173 {
19174 //finally... section data
19175
3/4
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
63 if ( version >= 0x254 && build >= 41 ) //read and write the size of tiles_used properly
19176 {
19177
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 if(!p_igetl(&tiles_used,f,true))
19178 {
19179 delete[] temp_tile;
19180 return qe_invalid;
19181 }
19182 4 }
19183 else
19184 {
19185
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 if(!p_igetw(&tiles_used,f,true))
19186 {
19187 delete[] temp_tile;
19188 return qe_invalid;
19189 }
19190 }
19191 }
19192
19193
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 tiles_used=zc_min(tiles_used, max_tiles);
19194
19195 //if ( version < 0x254 || ( version >= 0x254 && build < 41 )) //don't do this, it crashes ZQuest. -Z
19196 //if ( version < 0x254 && build < 41 )
19197
3/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if ( version < 0x254 || (version == 0x254 && build < 41) )
19198 //if ( build < 41 )
19199 {
19200
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 tiles_used=zc_min(tiles_used, ZC250MAXTILES-start_tile);
19201 59 }
19202 else //2.55
19203 {
19204
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 tiles_used = zc_min(tiles_used,NEWMAXTILES-start_tile);
19205 }
19206
19207 //if ( section_version > 1 ) tiles_used = NEWMAXTILES;
19208
19209 //al_trace("tiles_used = %d\n", tiles_used);
19210
19211
2/2
✓ Branch 0 taken 1037222 times.
✓ Branch 1 taken 63 times.
1037285 for(int32_t i=0; i<tiles_used; ++i)
19212 {
19213 1037222 byte format=tf4Bit;
19214 1037222 memset(temp_tile, 0, tilesize(tf32Bit));
19215
19216
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 1037222 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
1037222 if((version>0x211)||((version==0x211)&&(build>4)))
19217 {
19218
1/2
✓ Branch 0 taken 1037222 times.
✗ Branch 1 not taken.
1037222 if(!p_getc(&format,f,true))
19219 {
19220 delete[] temp_tile;
19221 return qe_invalid;
19222 }
19223 1037222 }
19224
4/4
✓ Branch 0 taken 70156 times.
✓ Branch 1 taken 967066 times.
✓ Branch 2 taken 34845 times.
✓ Branch 3 taken 35311 times.
1037222 if(section_version > 2 && !format)
19225 {
19226
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 35311 times.
35311 if(keepdata)
19227 {
19228 35311 reset_tile(buf,start_tile+i,tf4Bit);
19229 35311 }
19230 35311 continue;
19231 }
19232
19233
1/2
✓ Branch 0 taken 1001911 times.
✗ Branch 1 not taken.
1001911 if(!pfread(temp_tile,tilesize(format),f,true))
19234 {
19235 delete[] temp_tile;
19236 return qe_invalid;
19237 }
19238
19239
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1001911 times.
1001911 if(keepdata==true)
19240 {
19241 1001911 buf[start_tile+i].format=format;
19242
19243
1/2
✓ Branch 0 taken 1001911 times.
✗ Branch 1 not taken.
1001911 if(buf[start_tile+i].data)
19244 {
19245 1001911 free(buf[start_tile+i].data);
19246 1001911 buf[start_tile+i].data=NULL;
19247 1001911 }
19248
19249 1001911 buf[start_tile+i].data=(byte *)malloc(tilesize(buf[start_tile+i].format));
19250 1001911 memcpy(buf[start_tile+i].data,temp_tile,tilesize(buf[start_tile+i].format));
19251 1001911 }
19252 1001911 }
19253 }
19254
19255
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if ( section_version < 2 ) //write blank tile data --check s_version with this again instead?
19256 {
19257 //al_trace("Writing blank tile data to new tiles for build < 41\n");
19258
2/2
✓ Branch 0 taken 8789820 times.
✓ Branch 1 taken 59 times.
8789879 for ( int32_t q = ZC250MAXTILES; q < NEWMAXTILES; ++q )
19259 {
19260
19261 //memcpy(buf[q].data,temp_tile,tilesize(buf[q].format));
19262 8789820 reset_tile(buf,q,tf4Bit);
19263
19264
19265 /*
19266
19267 byte tempbyte;
19268 for(int32_t i=0; i<tilesize(tf4Bit); i++)
19269 {
19270 tempbyte=buf[ZC250MAXTILES-1].data[i];
19271 buf[q].data[i] = tempbyte;
19272 }
19273 //int32_t temp = tempbyte=buf[130].data[i];
19274 //buf[q].data = buf[ZC250MAXTILES-1].data;
19275 */
19276 //reset_tile(buf,q,tf4Bit);
19277 8789820 }
19278
19279 59 }
19280
19281
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true)
19282 {
19283
4/6
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 4 times.
63 if ( version < 0x254 || ( version >= 0x254 && build < 41 ))
19284 {
19285
2/2
✓ Branch 0 taken 3090168 times.
✓ Branch 1 taken 59 times.
3090227 for(int32_t i=start_tile+tiles_used; i<max_tiles; ++i)
19286 {
19287 //al_trace("Resetting tiles for ZC250MAXTILES, iteration: %d\n", i);
19288 3090168 reset_tile(buf,i,tf4Bit);
19289 3090168 }
19290 59 }
19291 else
19292 {
19293
2/2
✓ Branch 0 taken 596290 times.
✓ Branch 1 taken 4 times.
596294 for(int32_t i=start_tile+tiles_used; i<max_tiles; ++i)
19294 {
19295 //al_trace("Resetting tiles for build 41+\n");
19296 596290 reset_tile(buf,i,tf4Bit);
19297 596290 }
19298 }
19299
19300
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((version < 0x192)|| ((version == 0x192)&&(build<186)))
19301 {
19302 if(get_bit(quest_rules,qr_BSZELDA)) //
19303 {
19304 byte tempbyte;
19305 int32_t floattile=wpnsbuf[iwSwim].tile;
19306
19307 for(int32_t i=0; i<tilesize(tf4Bit); i++) //BSZelda tiles are out of order //does this include swim tiles?
19308 {
19309 tempbyte=buf[23].data[i];
19310 buf[23].data[i]=buf[24].data[i];
19311 buf[24].data[i]=buf[25].data[i];
19312 buf[25].data[i]=buf[26].data[i];
19313 buf[26].data[i]=tempbyte;
19314 }
19315 //swim tiles are out of order, too, but nobody cared? -Z
19316 for(int32_t i=0; i<tilesize(tf4Bit); i++)
19317 {
19318 tempbyte=buf[floattile+11].data[i];
19319 buf[floattile+11].data[i]=buf[floattile+12].data[i];
19320 buf[floattile+12].data[i]=tempbyte;
19321 }
19322 }
19323 }
19324
19325
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((version < 0x211)||((version == 0x211)&&(build<7))) //Goriya tiles are out of order
19326 {
19327 if(!get_bit(quest_rules,qr_NEWENEMYTILES))
19328 {
19329 byte tempbyte;
19330
19331 for(int32_t i=0; i<tilesize(tf4Bit); i++)
19332 {
19333 tempbyte=buf[130].data[i];
19334 buf[130].data[i]=buf[132].data[i];
19335 buf[132].data[i]=tempbyte;
19336
19337 tempbyte=buf[131].data[i];
19338 buf[131].data[i]=buf[133].data[i];
19339 buf[133].data[i]=tempbyte;
19340 }
19341 }
19342 }
19343
19344 63 al_trace("Registering blank tiles\n");
19345 63 register_blank_tiles();
19346 63 }
19347
19348 //memset(temp_tile, 0, tilesize(tf32Bit));
19349
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 delete[] temp_tile;
19350 63 temp_tile=NULL;
19351 63 return 0;
19352 63 }
19353
19354 63 int32_t readtunes(PACKFILE *f, zquestheader *Header, zctune *tunes /*zcmidi_ *midis*/, bool keepdata)
19355 {
19356 63 byte *mf=midi_flags;
19357 int32_t dummy;
19358 word dummy2;
19359 // zcmidi_ temp_midi;
19360 int32_t tunes_to_read;
19361 63 int32_t tune_count=0;
19362 63 word section_version=0;
19363 63 zctune temp;
19364
19365
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(Header->zelda_version < 0x193)
19366 {
19367 // mf=Header->data_flags+ZQ_MIDIS2;
19368 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<178)))
19369 {
19370 tunes_to_read=MAXCUSTOMMIDIS192b177;
19371 }
19372 else
19373 {
19374 tunes_to_read=MAXCUSTOMTUNES;
19375 }
19376 }
19377 else
19378 {
19379 //section version info
19380
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&section_version,f,true))
19381 {
19382 return qe_invalid;
19383 }
19384
19385 63 FFCore.quest_format[vMIDIs] = section_version;
19386
19387 //al_trace("Tunes version %d\n", section_version);
19388
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&dummy2,f,true))
19389 {
19390 return qe_invalid;
19391 }
19392
19393 //section size
19394
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy,f,true))
19395 {
19396 return qe_invalid;
19397 }
19398
19399 //finally... section data
19400
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!pfread(midi_flags,sizeof(midi_flags),f,true))
19401 {
19402 return qe_invalid;
19403 }
19404
19405 63 tunes_to_read=MAXCUSTOMTUNES;
19406 }
19407
19408
2/2
✓ Branch 0 taken 15876 times.
✓ Branch 1 taken 63 times.
15939 for(int32_t i=0; i<MAXCUSTOMTUNES; ++i)
19409 {
19410
2/2
✓ Branch 0 taken 14681 times.
✓ Branch 1 taken 1195 times.
15876 if(get_bit(mf, i))
19411 {
19412 1195 ++tune_count;
19413 1195 }
19414 15876 }
19415
19416
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true)
19417 {
19418 63 reset_tunes(tunes); //reset_midis(midis);
19419 63 }
19420
19421
2/2
✓ Branch 0 taken 15876 times.
✓ Branch 1 taken 63 times.
15939 for(int32_t i=0; i<tunes_to_read; i++)
19422 {
19423 15876 temp.clear(); //memset(&temp_midi,0,sizeof(zcmidi_));
19424
19425
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 15876 times.
15876 if(keepdata==true)
19426 {
19427 15876 tunes[i].reset(); // reset_midi(midis+i);
19428 15876 }
19429
19430
2/2
✓ Branch 0 taken 14681 times.
✓ Branch 1 taken 1195 times.
15876 if(get_bit(mf,i))
19431 {
19432
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1195 times.
1195 if(section_version < 4)
19433 {
19434 if(!pfread(&temp.title,sizeof(char)*20,f,true))
19435 {
19436 return qe_invalid;
19437 }
19438 }
19439 else
19440 {
19441
1/2
✓ Branch 0 taken 1195 times.
✗ Branch 1 not taken.
1195 if(!pfread(&temp.title,sizeof(temp.title),f,true))
19442 {
19443 return qe_invalid;
19444 }
19445 }
19446
19447
1/2
✓ Branch 0 taken 1195 times.
✗ Branch 1 not taken.
1195 if(!p_igetl(&temp.start,f,true))
19448 {
19449 return qe_invalid;
19450 }
19451
19452
1/2
✓ Branch 0 taken 1195 times.
✗ Branch 1 not taken.
1195 if(!p_igetl(&temp.loop_start,f,true))
19453 {
19454 return qe_invalid;
19455 }
19456
19457
1/2
✓ Branch 0 taken 1195 times.
✗ Branch 1 not taken.
1195 if(!p_igetl(&temp.loop_end,f,true))
19458 {
19459 return qe_invalid;
19460 }
19461
19462
1/2
✓ Branch 0 taken 1195 times.
✗ Branch 1 not taken.
1195 if(!p_igetw(&temp.loop,f,true))
19463 {
19464 return qe_invalid;
19465 }
19466
19467
1/2
✓ Branch 0 taken 1195 times.
✗ Branch 1 not taken.
1195 if(!p_igetw(&temp.volume,f,true))
19468 {
19469 return qe_invalid;
19470 }
19471
19472
1/2
✓ Branch 0 taken 1195 times.
✗ Branch 1 not taken.
1195 if(Header->zelda_version < 0x193)
19473 {
19474 if(!p_igetl(&dummy,f,true))
19475 {
19476 return qe_invalid;
19477 }
19478 }
19479
19480
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1195 times.
1195 if(section_version >= 3)
19481 {
19482
1/2
✓ Branch 0 taken 1195 times.
✗ Branch 1 not taken.
1195 if(!pfread(&temp.flags,sizeof(temp.flags),f,true))
19483 {
19484 return qe_invalid;
19485 }
19486 1195 }
19487
19488
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1195 times.
1195 if(keepdata==true)
19489 {
19490 1195 tunes[i].copyfrom(temp); // memcpy(&midis[i], &temp_midi, sizeof(zcmidi_));
19491 1195 }
19492
19493
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1195 times.
1195 if(section_version < 2) //= 1 || (Header->zelda_version < 0x211) || (Header->zelda_version == 0x211 && Header->build < 18))
19494 {
19495 // old format - a midi is a midi
19496 if(((keepdata==true?tunes[i].data:temp.data)=read_midi(f, true))==NULL)
19497 {
19498 return qe_invalid;
19499 }
19500
19501 //yes you can do this. Isn't the ? operator awesome? :)
19502 (keepdata ? tunes[i] : temp).format = MFORMAT_MIDI;
19503 }
19504 else
19505 {
19506 // 'midi' could be midi or nes, gb, ... music
19507
2/4
✓ Branch 0 taken 1195 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1195 times.
✗ Branch 3 not taken.
1195 if(!pfread(&(keepdata ? tunes[i] : temp).format,sizeof((keepdata ? tunes[i] : temp).format),f,true))
19508 {
19509 return qe_invalid;
19510 }
19511
19512
1/2
✓ Branch 0 taken 1195 times.
✗ Branch 1 not taken.
1195 zctune *ptr = (keepdata==true)?&(tunes[i]):&temp;
19513
19514
1/2
✓ Branch 0 taken 1195 times.
✗ Branch 1 not taken.
1195 switch(temp.format)
19515 {
19516 case MFORMAT_MIDI:
19517
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1195 times.
1195 if((ptr->data=read_midi(f, true))==NULL)
19518 {
19519 return qe_invalid;
19520 }
19521
19522 1195 break;
19523
19524 default:
19525 return qe_invalid;
19526 break;
19527 }
19528 }
19529 1195 }
19530 15876 }
19531
19532 63 return 0;
19533 63 }
19534
19535 63 int32_t readcheatcodes(PACKFILE *f, zquestheader *Header, bool keepdata)
19536 {
19537 int32_t dummy;
19538 ZCHEATS tempzcheats;
19539 63 char temp_use_cheats=1;
19540 63 memset(&tempzcheats, 0, sizeof(tempzcheats));
19541 63 word s_version = 0;
19542
19543
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(Header->zelda_version > 0x192)
19544 {
19545 //section version info
19546
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_version,f,true))
19547 {
19548 return qe_invalid;
19549 }
19550
19551 63 FFCore.quest_format[vCheats] = s_version;
19552 //al_trace("Cheats version %d\n", dummy);
19553
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&dummy,f,true))
19554 {
19555 return qe_invalid;
19556 }
19557
19558 //section size
19559
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy,f,true))
19560 {
19561 return qe_invalid;
19562 }
19563
19564 //finally... section data
19565
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(!p_getc(&temp_use_cheats,f,true))
19566 {
19567 return qe_invalid;
19568 }
19569 63 }
19570
19571
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(Header->data_flags[ZQ_CHEATS2])
19572 {
19573
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&tempzcheats.flags,f,true))
19574 {
19575 return qe_invalid;
19576 }
19577
19578
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!pfread(&tempzcheats.codes, sizeof(tempzcheats.codes), f,true))
19579 {
19580 return qe_invalid;
19581 }
19582 63 }
19583
19584
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata==true)
19585 {
19586 63 memcpy(&zcheats, &tempzcheats, sizeof(tempzcheats));
19587 63 Header->data_flags[ZQ_CHEATS2]=temp_use_cheats;
19588 63 }
19589
19590 63 return 0;
19591 63 }
19592
19593 181 int32_t readinitdata(PACKFILE *f, zquestheader *Header, bool keepdata)
19594 {
19595 int32_t dummy;
19596 181 word s_version=0, s_cversion=0;
19597 byte padding;
19598 word tempw;
19599
19600 181 zinitdata temp_zinit;
19601
19602 // Legacy item properties (now integrated into itemdata)
19603 byte sword_hearts[4];
19604 byte beam_hearts[4];
19605 181 byte beam_percent=0;
19606 word beam_power[4];
19607 181 byte hookshot_length=99;
19608 181 byte hookshot_links=100;
19609 181 byte longshot_length=99;
19610 181 byte longshot_links=100;
19611 181 byte moving_fairy_hearts=3;
19612 181 byte moving_fairy_heart_percent=0;
19613 181 byte stationary_fairy_hearts=3;
19614 181 byte stationary_fairy_heart_percent=0;
19615 181 byte moving_fairy_magic=0;
19616 181 byte moving_fairy_magic_percent=0;
19617 181 byte stationary_fairy_magic=0;
19618 181 byte stationary_fairy_magic_percent=0;
19619 181 byte blue_potion_hearts=100;
19620 181 byte blue_potion_heart_percent=1;
19621 181 byte red_potion_hearts=100;
19622 181 byte red_potion_heart_percent=1;
19623 181 byte blue_potion_magic=100;
19624 181 byte blue_potion_magic_percent=1;
19625 181 byte red_potion_magic=100;
19626 181 byte red_potion_magic_percent=1;
19627
19628
2/2
✓ Branch 0 taken 63 times.
✓ Branch 1 taken 118 times.
181 temp_zinit.subscreen_style=get_bit(quest_rules,qr_COOLSCROLL)?1:0;
19629
19630
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(Header->zelda_version > 0x192)
19631 {
19632 //section version info
19633
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&s_version,f,true))
19634 {
19635 return qe_invalid;
19636 }
19637
19638 63 FFCore.quest_format[vInitData] = s_version;
19639
19640 //al_trace("Init data version %d\n", s_version);
19641
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&s_cversion,f,true))
19642 {
19643 return qe_invalid;
19644 }
19645
19646 //section size
19647
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetl(&dummy,f,true))
19648 {
19649 return qe_invalid;
19650 }
19651 63 }
19652
19653 /* HIGHLY UNORTHODOX UPDATING THING, by L
19654 * This fixes quests made before revision 277 (such as the 'Lost Isle Build'),
19655 * where the speed of Pols Voice changed. It also coincided with V_INITDATA
19656 * changing from 13 to 14.
19657 */
19658
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(keepdata && s_version < 14)
19659 fixpolsvoice=true;
19660
19661 /* End highly unorthodox updating thing */
19662
19663
4/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 59 times.
✓ Branch 5 taken 4 times.
63 if(s_version >= 15 && get_bit(deprecated_rules, 27)) // The int16_t-lived rule, qr_JUMPHEROLAYER3
19664 4 temp_zinit.jump_hero_layer_threshold=0;
19665
19666
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version >= 10)
19667 {
19668 char temp;
19669
19670 //new-style items
19671
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t j=0; j<256; j++)
19672 {
19673
2/4
✓ Branch 0 taken 16128 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 16128 times.
16128 if(!p_getc(&temp,f,true))
19674 return qe_invalid;
19675
19676 16128 temp_zinit.items[j] = (temp != 0);
19677 16128 }
19678 63 }
19679
19680
3/6
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 55 times.
✓ Branch 5 taken 55 times.
63 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>26)))
19681 {
19682 char temp;
19683
19684 //finally... section data
19685
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 55 times.
✓ Branch 3 taken 55 times.
118 if((Header->zelda_version > 0x192)||
19686 //new only
19687 ((Header->zelda_version == 0x192)&&(Header->build>173)))
19688 {
19689 //OLD-style items... sigh
19690
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version < 10)
19691 {
19692 if(!p_getc(&temp,f,true))
19693 {
19694 return qe_invalid;
19695 }
19696
19697 temp_zinit.items[iRaft]=(temp != 0);
19698
19699 if(!p_getc(&temp,f,true))
19700 {
19701 return qe_invalid;
19702 }
19703
19704 temp_zinit.items[iLadder]=(temp != 0);
19705
19706 if(!p_getc(&temp,f,true))
19707 {
19708 return qe_invalid;
19709 }
19710
19711 temp_zinit.items[iBook]=(temp != 0);
19712
19713 if(!p_getc(&temp,f,true))
19714 {
19715 return qe_invalid;
19716 }
19717
19718 temp_zinit.items[iMKey]=(temp!=0);
19719
19720 if(!p_getc(&temp,f,true))
19721 {
19722 return qe_invalid;
19723 }
19724
19725 temp_zinit.items[iFlippers]=(temp != 0);
19726
19727 if(!p_getc(&temp,f,true))
19728 {
19729 return qe_invalid;
19730 }
19731
19732 temp_zinit.items[iBoots]=(temp!=0);
19733 }
19734 63 }
19735
19736
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 118 times.
118 if(s_version < 10)
19737 {
19738 char tempring, tempsword, tempshield, tempwallet, tempbracelet, tempamulet, tempbow;
19739
19740 if(!p_getc(&tempring,f,true))
19741 {
19742 return qe_invalid;
19743 }
19744
19745 if(!p_getc(&tempsword,f,true))
19746 {
19747 return qe_invalid;
19748 }
19749
19750 if(!p_getc(&tempshield,f,true))
19751 {
19752 return qe_invalid;
19753 }
19754
19755 if(!p_getc(&tempwallet,f,true))
19756 {
19757 return qe_invalid;
19758 }
19759
19760 if(!p_getc(&tempbracelet,f,true))
19761 {
19762 return qe_invalid;
19763 }
19764
19765 if(!p_getc(&tempamulet,f,true))
19766 {
19767 return qe_invalid;
19768 }
19769
19770 if(!p_getc(&tempbow,f,true))
19771 {
19772 return qe_invalid;
19773 }
19774
19775 //old only
19776 if((Header->zelda_version == 0x192)&&(Header->build<174))
19777 {
19778 tempring=(tempring)?(1<<(tempring-1)):0;
19779 tempsword=(tempsword)?(1<<(tempsword-1)):0;
19780 tempshield=(tempshield)?(1<<(tempshield-1)):0;
19781 tempwallet=(tempwallet)?(1<<(tempwallet-1)):0;
19782 tempbracelet=(tempbracelet)?(1<<(tempbracelet-1)):0;
19783 tempamulet=(tempamulet)?(1<<(tempamulet-1)):0;
19784 tempbow=(tempbow)?(1<<(tempbow-1)):0;
19785 }
19786
19787 //rings start at level 2... wtf
19788 //account for this -DD
19789 tempring <<= 1;
19790 addOldStyleFamily(&temp_zinit, itemsbuf, itype_ring, tempring);
19791 addOldStyleFamily(&temp_zinit, itemsbuf, itype_sword, tempsword);
19792 addOldStyleFamily(&temp_zinit, itemsbuf, itype_shield, tempshield);
19793 addOldStyleFamily(&temp_zinit, itemsbuf, itype_wallet, tempwallet);
19794 //bracelet ALSO starts at level 2 :-( -DD
19795 tempbracelet<<=1;
19796 addOldStyleFamily(&temp_zinit, itemsbuf, itype_bracelet, tempbracelet);
19797 addOldStyleFamily(&temp_zinit, itemsbuf, itype_amulet, tempamulet);
19798 addOldStyleFamily(&temp_zinit, itemsbuf, itype_bow, tempbow);
19799
19800 //new only
19801 if((Header->zelda_version == 0x192)&&(Header->build>173))
19802 {
19803 for(int32_t q=0; q<32; q++)
19804 {
19805 if(!p_getc(&padding,f,true))
19806 {
19807 return qe_invalid;
19808 }
19809 }
19810 }
19811
19812 char tempcandle, tempboomerang, temparrow, tempwhistle;
19813
19814 if(!p_getc(&tempcandle,f,true))
19815 {
19816 return qe_invalid;
19817 }
19818
19819 if(!p_getc(&tempboomerang,f,true))
19820 {
19821 return qe_invalid;
19822 }
19823
19824 if(!p_getc(&temparrow,f,true))
19825 {
19826 return qe_invalid;
19827 }
19828
19829 if(!p_getc(&temp,f,true))
19830 {
19831 return qe_invalid;
19832 }
19833
19834 addOldStyleFamily(&temp_zinit, itemsbuf, itype_potion, temp);
19835
19836 if(!p_getc(&tempwhistle,f,true))
19837 {
19838 return qe_invalid;
19839 }
19840
19841 //old only
19842 if((Header->zelda_version == 0x192)&&(Header->build<174))
19843 {
19844 tempcandle=(tempcandle)?(1<<(tempcandle-1)):0;
19845 tempboomerang=(tempboomerang)?(1<<(tempboomerang-1)):0;
19846 temparrow=(temparrow)?(1<<(temparrow-1)):0;
19847 tempwhistle=(tempwhistle)?(1<<(tempwhistle-1)):0;
19848 }
19849
19850 addOldStyleFamily(&temp_zinit, itemsbuf, itype_candle, tempcandle);
19851 addOldStyleFamily(&temp_zinit, itemsbuf, itype_brang, tempboomerang);
19852 addOldStyleFamily(&temp_zinit, itemsbuf, itype_arrow, temparrow);
19853 addOldStyleFamily(&temp_zinit, itemsbuf, itype_whistle, tempwhistle);
19854 //What about the potion...?
19855
19856 }
19857
19858
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 59 times.
118 if(s_version < 29)
19859 {
19860 //Oh sure, stick these IN THE MIDDLE OF THE ITEMS, just to make me want
19861 //to jab out my eye...
19862
2/4
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✗ Branch 3 not taken.
59 if(!p_getc(&padding,f,true))
19863 return qe_invalid;
19864 59 temp_zinit.bombs = padding;
19865
19866
2/4
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✗ Branch 3 not taken.
59 if(!p_getc(&padding,f,true))
19867 return qe_invalid;
19868 59 temp_zinit.super_bombs = padding;
19869 59 }
19870
19871 //Back to more OLD item code
19872
0/2
✗ Branch 0 not taken.
✗ Branch 1 not taken.
118 if(s_version < 10)
19873 {
19874 if((Header->zelda_version > 0x192)||
19875 //new only
19876 ((Header->zelda_version == 0x192)&&(Header->build>173)))
19877 {
19878 if(!p_getc(&temp,f,true))
19879 {
19880 return qe_invalid;
19881 }
19882
19883 addOldStyleFamily(&temp_zinit, itemsbuf, itype_wand, temp);
19884
19885 if(!p_getc(&temp,f,true))
19886 {
19887 return qe_invalid;
19888 }
19889
19890 addOldStyleFamily(&temp_zinit, itemsbuf, itype_letter, temp);
19891
19892 if(!p_getc(&temp,f,true))
19893 {
19894 return qe_invalid;
19895 }
19896
19897 addOldStyleFamily(&temp_zinit, itemsbuf, itype_lens, temp);
19898
19899 if(!p_getc(&temp,f,true))
19900 {
19901 return qe_invalid;
19902 }
19903
19904 addOldStyleFamily(&temp_zinit, itemsbuf, itype_hookshot, temp);
19905
19906 if(!p_getc(&temp,f,true))
19907 {
19908 return qe_invalid;
19909 }
19910
19911 addOldStyleFamily(&temp_zinit, itemsbuf, itype_bait, temp);
19912
19913 if(!p_getc(&temp,f,true))
19914 {
19915 return qe_invalid;
19916 }
19917
19918 addOldStyleFamily(&temp_zinit, itemsbuf, itype_hammer, temp);
19919
19920 if(!p_getc(&temp,f,true))
19921 {
19922 return qe_invalid;
19923 }
19924
19925 addOldStyleFamily(&temp_zinit, itemsbuf, itype_dinsfire, temp);
19926
19927 if(!p_getc(&temp,f,true))
19928 {
19929 return qe_invalid;
19930 }
19931
19932 addOldStyleFamily(&temp_zinit, itemsbuf, itype_faroreswind, temp);
19933
19934 if(!p_getc(&temp,f,true))
19935 {
19936 return qe_invalid;
19937 }
19938
19939 addOldStyleFamily(&temp_zinit, itemsbuf, itype_nayruslove, temp);
19940
19941 if(!p_getc(&temp,f,true))
19942 {
19943 return qe_invalid;
19944 }
19945
19946 if(Header->zelda_version == 0x192)
19947 {
19948 for(int32_t q=0; q<32; q++)
19949 {
19950 if(!p_getc(&padding,f,true))
19951 {
19952 return qe_invalid;
19953 }
19954 }
19955 }
19956 }
19957 }
19958
19959 //old only
19960 if((Header->zelda_version == 0x192)&&(Header->build<174))
19961 {
19962 byte equipment, items; //bit flags
19963
19964 if(!p_getc(&equipment,f,true))
19965 {
19966 return qe_invalid;
19967 }
19968
19969 temp_zinit.items[iRaft]=(get_bit(&equipment, idE_RAFT)!=0);
19970 temp_zinit.items[iLadder]=(get_bit(&equipment, idE_LADDER)!=0);
19971 temp_zinit.items[iBook]=(get_bit(&equipment, idE_BOOK)!=0);
19972 temp_zinit.items[iMKey]=(get_bit(&equipment, idE_KEY)!=0);
19973 temp_zinit.items[iFlippers]=(get_bit(&equipment, idE_FLIPPERS)!=0);
19974 temp_zinit.items[iBoots]=(get_bit(&equipment, idE_BOOTS)!=0);
19975
19976
19977 if(!p_getc(&items,f,true))
19978 {
19979 return qe_invalid;
19980 }
19981
19982 temp_zinit.items[iWand]=(get_bit(&items, idI_WAND)!=0);
19983 temp_zinit.items[iLetter]=(get_bit(&items, idI_LETTER)!=0);
19984 temp_zinit.items[iLens]=(get_bit(&items, idI_LENS)!=0);
19985 temp_zinit.items[iHookshot]=(get_bit(&items, idI_HOOKSHOT)!=0);
19986 temp_zinit.items[iBait]=(get_bit(&items, idI_BAIT)!=0);
19987 temp_zinit.items[iHammer]=(get_bit(&items, idI_HAMMER)!=0);
19988 }
19989
19990 if(!p_getc(&temp_zinit.hc,f,true))
19991 {
19992 return qe_invalid;
19993 }
19994
19995
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version < 14)
19996 {
19997 byte temphp;
19998
19999 if(!p_getc(&temphp,f,true))
20000 {
20001 return qe_invalid;
20002 }
20003
20004 temp_zinit.start_heart=temphp;
20005
20006 if(!p_getc(&temphp,f,true))
20007 {
20008 return qe_invalid;
20009 }
20010
20011 temp_zinit.cont_heart=temphp;
20012 }
20013 else
20014 {
20015
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.start_heart,f,true))
20016 {
20017 return qe_invalid;
20018 }
20019
20020
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.cont_heart,f,true))
20021 {
20022 return qe_invalid;
20023 }
20024 }
20025
20026
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.hcp,f,true))
20027 {
20028 return qe_invalid;
20029 }
20030
20031
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version >= 14)
20032 {
20033
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.hcp_per_hc,f,true))
20034 {
20035 return qe_invalid;
20036 }
20037
20038
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version<16) // July 2007
20039 {
20040 if(get_bit(quest_rules,qr_BRANGPICKUP+1))
20041 temp_zinit.hcp_per_hc = 0xFF;
20042
20043 //Dispose of legacy rule
20044 set_bit(quest_rules,qr_BRANGPICKUP+1, 0);
20045 }
20046 63 }
20047
20048
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(s_version < 29)
20049 {
20050
2/4
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✗ Branch 3 not taken.
59 if(!p_getc(&padding,f,true))
20051 return qe_invalid;
20052 59 temp_zinit.max_bombs = padding;
20053 59 }
20054
20055
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.keys,f,true))
20056 {
20057 return qe_invalid;
20058 }
20059
20060
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.rupies,f,true))
20061 {
20062 return qe_invalid;
20063 }
20064
20065
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.triforce,f,true))
20066 {
20067 return qe_invalid;
20068 }
20069
20070
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if(s_version>12 || (Header->zelda_version == 0x211 && Header->build == 18))
20071 {
20072
2/2
✓ Branch 0 taken 4032 times.
✓ Branch 1 taken 63 times.
4095 for(int32_t i=0; i<64; i++)
20073 {
20074
2/4
✓ Branch 0 taken 4032 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4032 times.
4032 if(!p_getc(&temp_zinit.map[i],f,true))
20075 {
20076 return qe_invalid;
20077 }
20078 4032 }
20079
20080
2/2
✓ Branch 0 taken 4032 times.
✓ Branch 1 taken 63 times.
4095 for(int32_t i=0; i<64; i++)
20081 {
20082
2/4
✓ Branch 0 taken 4032 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4032 times.
4032 if(!p_getc(&temp_zinit.compass[i],f,true))
20083 {
20084 return qe_invalid;
20085 }
20086 4032 }
20087 63 }
20088 else
20089 {
20090 for(int32_t i=0; i<32; i++)
20091 {
20092 if(!p_getc(&temp_zinit.map[i],f,true))
20093 {
20094 return qe_invalid;
20095 }
20096 }
20097
20098 for(int32_t i=0; i<32; i++)
20099 {
20100 if(!p_getc(&temp_zinit.compass[i],f,true))
20101 {
20102 return qe_invalid;
20103 }
20104 }
20105 }
20106
20107
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
63 if((Header->zelda_version > 0x192)||
20108 //new only
20109 ((Header->zelda_version == 0x192)&&(Header->build>173)))
20110 {
20111
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if(s_version>12 || (Header->zelda_version == 0x211 && Header->build == 18))
20112 {
20113
2/2
✓ Branch 0 taken 4032 times.
✓ Branch 1 taken 63 times.
4095 for(int32_t i=0; i<64; i++)
20114 {
20115
2/4
✓ Branch 0 taken 4032 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 4032 times.
4032 if(!p_getc(&temp_zinit.boss_key[i],f,true))
20116 {
20117 return qe_invalid;
20118 }
20119 4032 }
20120 63 }
20121 else
20122 {
20123 for(int32_t i=0; i<32; i++)
20124 {
20125 if(!p_getc(&temp_zinit.boss_key[i],f,true))
20126 {
20127 return qe_invalid;
20128 }
20129 }
20130 }
20131 63 }
20132
20133
2/2
✓ Branch 0 taken 63 times.
✓ Branch 1 taken 1008 times.
1071 for(int32_t i=0; i<16; i++)
20134 {
20135
2/4
✓ Branch 0 taken 1008 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1008 times.
1008 if(!p_getc(&temp_zinit.misc[i],f,true))
20136 {
20137 return qe_invalid;
20138 }
20139 1008 }
20140
20141
1/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
63 if(s_version < 15) for(int32_t i=0; i<4; i++)
20142 {
20143 if(!p_getc(&sword_hearts[i],f,true))
20144 {
20145 return qe_invalid;
20146 }
20147 }
20148
20149
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.last_map,f,true))
20150 {
20151 return qe_invalid;
20152 }
20153
20154
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.last_screen,f,true))
20155 {
20156 return qe_invalid;
20157 }
20158
20159
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version < 14)
20160 {
20161 byte tempmp;
20162
20163 if(!p_getc(&tempmp,f,true))
20164 {
20165 return qe_invalid;
20166 }
20167
20168 temp_zinit.max_magic=tempmp;
20169
20170 if(!p_getc(&tempmp,f,true))
20171 {
20172 return qe_invalid;
20173 }
20174
20175 temp_zinit.magic=tempmp;
20176 }
20177 else
20178 {
20179
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.max_magic,f,true))
20180 {
20181 return qe_invalid;
20182 }
20183
20184
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.magic,f,true))
20185 {
20186 return qe_invalid;
20187 }
20188 }
20189
20190
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version < 15)
20191 {
20192 if(s_version < 12)
20193 {
20194 temp_zinit.max_magic*=32;
20195 temp_zinit.magic*=32;
20196 }
20197
20198 for(int32_t i=0; i<4; i++)
20199 {
20200 if(!p_getc(&beam_hearts[i],f,true))
20201 {
20202 return qe_invalid;
20203 }
20204 }
20205
20206 if(!p_getc(&beam_percent,f,true))
20207 {
20208 return qe_invalid;
20209 }
20210 }
20211 else
20212 {
20213
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.bomb_ratio,f,true))
20214 {
20215 return qe_invalid;
20216 }
20217 }
20218
20219
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version < 15)
20220 {
20221 byte tempbp;
20222
20223 for(int32_t i=0; i<4; i++)
20224 {
20225 if(!(s_version < 14 ? p_getc(&tempbp,f,true) : p_igetw(&tempbp,f,true)))
20226 {
20227 return qe_invalid;
20228 }
20229
20230 beam_power[i]=tempbp;
20231 }
20232
20233 if(!p_getc(&hookshot_links,f,true))
20234 {
20235 return qe_invalid;
20236 }
20237
20238 if(s_version>6)
20239 {
20240 if(!p_getc(&hookshot_length,f,true))
20241 {
20242 return qe_invalid;
20243 }
20244
20245 if(!p_getc(&longshot_links,f,true))
20246 {
20247 return qe_invalid;
20248 }
20249
20250 if(!p_getc(&longshot_length,f,true))
20251 {
20252 return qe_invalid;
20253 }
20254 }
20255 }
20256
20257
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.msg_more_x,f,true))
20258 {
20259 return qe_invalid;
20260 }
20261
20262
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.msg_more_y,f,true))
20263 {
20264 return qe_invalid;
20265 }
20266
20267
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.subscreen,f,true))
20268 {
20269 return qe_invalid;
20270 }
20271
20272 //old only
20273
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
63 if((Header->zelda_version == 0x192)&&(Header->build<174))
20274 {
20275 for(int32_t i=0; i<32; i++)
20276 {
20277 if(!p_getc(&temp_zinit.boss_key[i],f,true))
20278 {
20279 return qe_invalid;
20280 }
20281 }
20282 }
20283
20284
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((Header->zelda_version > 0x192)||((Header->zelda_version == 0x192)&&(Header->build>173))) //new only
20285 {
20286
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version <= 10)
20287 {
20288 byte tempbyte;
20289
20290 if(!p_getc(&tempbyte,f,true))
20291 {
20292 return qe_invalid;
20293 }
20294
20295 temp_zinit.start_dmap = (word)tempbyte;
20296 }
20297 else
20298 {
20299
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.start_dmap,f,true))
20300 {
20301 return qe_invalid;
20302 }
20303 }
20304
20305
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.heroAnimationStyle,f,true))
20306 {
20307 return qe_invalid;
20308 }
20309 63 }
20310
20311
3/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✓ Branch 3 taken 4 times.
63 if(s_version>1 && s_version < 29)
20312 {
20313
2/4
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✗ Branch 3 not taken.
59 if(!p_getc(&padding,f,true))
20314 return qe_invalid;
20315 59 temp_zinit.arrows = padding;
20316
20317
2/4
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 59 times.
✗ Branch 3 not taken.
59 if(!p_getc(&padding,f,true))
20318 return qe_invalid;
20319 59 temp_zinit.max_arrows = padding;
20320 59 }
20321
20322
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version>2)
20323 {
20324
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version <= 10)
20325 {
20326 for(int32_t i=0; i<OLDMAXLEVELS; i++)
20327 {
20328 if(!p_getc(&(temp_zinit.level_keys[i]),f,true))
20329 {
20330 return qe_invalid;
20331 }
20332 }
20333 }
20334 else
20335 {
20336
2/2
✓ Branch 0 taken 32256 times.
✓ Branch 1 taken 63 times.
32319 for(int32_t i=0; i<MAXLEVELS; i++)
20337 {
20338
2/4
✓ Branch 0 taken 32256 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 32256 times.
✗ Branch 3 not taken.
32256 if(!p_getc(&(temp_zinit.level_keys[i]),f,true))
20339 {
20340 return qe_invalid;
20341 }
20342 32256 }
20343 }
20344 63 }
20345
20346
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version>3)
20347 {
20348
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.ss_grid_x,f,true))
20349 {
20350 return qe_invalid;
20351 }
20352
20353
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.ss_grid_y,f,true))
20354 {
20355 return qe_invalid;
20356 }
20357
20358
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.ss_grid_xofs,f,true))
20359 {
20360 return qe_invalid;
20361 }
20362
20363
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.ss_grid_yofs,f,true))
20364 {
20365 return qe_invalid;
20366 }
20367
20368
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.ss_grid_color,f,true))
20369 {
20370 return qe_invalid;
20371 }
20372
20373
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.ss_bbox_1_color,f,true))
20374 {
20375 return qe_invalid;
20376 }
20377
20378
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.ss_bbox_2_color,f,true))
20379 {
20380 return qe_invalid;
20381 }
20382
20383
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.ss_flags,f,true))
20384 {
20385 return qe_invalid;
20386 }
20387
20388
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 temp_zinit.ss_grid_x=zc_max(temp_zinit.ss_grid_x,1);
20389
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 temp_zinit.ss_grid_y=zc_max(temp_zinit.ss_grid_y,1);
20390 63 }
20391
20392
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(s_version>4 && s_version<15)
20393 {
20394 if(!p_getc(&moving_fairy_hearts,f,true))
20395 {
20396 return qe_invalid;
20397 }
20398
20399 if(!p_getc(&moving_fairy_heart_percent,f,true))
20400 {
20401 return qe_invalid;
20402 }
20403 }
20404
20405
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(s_version>5 && s_version < 10)
20406 {
20407 if(!p_getc(&temp,f,true))
20408 {
20409 return qe_invalid;
20410 }
20411
20412 addOldStyleFamily(&temp_zinit, itemsbuf, itype_quiver, temp);
20413 }
20414
20415
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(s_version>6 && s_version<15)
20416 {
20417 if(!p_getc(&stationary_fairy_hearts,f,true))
20418 {
20419 return qe_invalid;
20420 }
20421
20422 if(!p_getc(&stationary_fairy_heart_percent,f,true))
20423 {
20424 return qe_invalid;
20425 }
20426
20427 if(!p_getc(&moving_fairy_magic,f,true))
20428 {
20429 return qe_invalid;
20430 }
20431
20432 if(!p_getc(&moving_fairy_magic_percent,f,true))
20433 {
20434 return qe_invalid;
20435 }
20436
20437 if(!p_getc(&stationary_fairy_magic,f,true))
20438 {
20439 return qe_invalid;
20440 }
20441
20442 if(!p_getc(&stationary_fairy_magic_percent,f,true))
20443 {
20444 return qe_invalid;
20445 }
20446
20447 if(!p_getc(&blue_potion_hearts,f,true))
20448 {
20449 return qe_invalid;
20450 }
20451
20452 if(!p_getc(&blue_potion_heart_percent,f,true))
20453 {
20454 return qe_invalid;
20455 }
20456
20457 if(!p_getc(&red_potion_hearts,f,true))
20458 {
20459 return qe_invalid;
20460 }
20461
20462 if(!p_getc(&red_potion_heart_percent,f,true))
20463 {
20464 return qe_invalid;
20465 }
20466
20467 if(!p_getc(&blue_potion_magic,f,true))
20468 {
20469 return qe_invalid;
20470 }
20471
20472 if(!p_getc(&blue_potion_magic_percent,f,true))
20473 {
20474 return qe_invalid;
20475 }
20476
20477 if(!p_getc(&red_potion_magic,f,true))
20478 {
20479 return qe_invalid;
20480 }
20481
20482 if(!p_getc(&red_potion_magic_percent,f,true))
20483 {
20484 return qe_invalid;
20485 }
20486 }
20487
20488
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version>6)
20489 {
20490
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.subscreen_style,f,true))
20491 {
20492 return qe_invalid;
20493 }
20494 63 }
20495
20496
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version>7)
20497 {
20498
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.usecustomsfx,f,true))
20499 {
20500 return qe_invalid;
20501 }
20502 63 }
20503
20504
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version>8)
20505 {
20506
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.max_rupees,f,true))
20507 {
20508 return qe_invalid;
20509 }
20510
20511
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.max_keys,f,true))
20512 {
20513 return qe_invalid;
20514 }
20515 63 }
20516
20517
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version>16)
20518 {
20519
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.gravity,f,true))
20520 {
20521 return qe_invalid;
20522 }
20523
20524
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_igetw(&temp_zinit.terminalv,f,true))
20525 {
20526 return qe_invalid;
20527 }
20528
20529
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.msg_speed,f,true))
20530 {
20531 return qe_invalid;
20532 }
20533
20534
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.transition_type,f,true))
20535 {
20536 return qe_invalid;
20537 }
20538
20539
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.jump_hero_layer_threshold,f,true))
20540 {
20541 return qe_invalid;
20542 }
20543 63 }
20544
20545
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version>17)
20546 {
20547
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(!p_getc(&temp_zinit.msg_more_is_offset,f,true))
20548 {
20549 return qe_invalid;
20550 }
20551 63 }
20552
20553 //expaned init data for larger values in 2.55
20554
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if ( s_version >= 19 ) //expand init data bombs, sbombs, and arrows to 0xFFFF
20555 {
20556
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_igetw(&temp_zinit.bombs,f,true))
20557 {
20558 return qe_invalid;
20559 }
20560
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_igetw(&temp_zinit.super_bombs,f,true))
20561 {
20562 return qe_invalid;
20563 }
20564
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_igetw(&temp_zinit.max_bombs,f,true))
20565 {
20566 return qe_invalid;
20567 }
20568
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_igetw(&temp_zinit.max_sbombs,f,true))
20569 {
20570 return qe_invalid;
20571 }
20572
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_igetw(&temp_zinit.arrows,f,true))
20573 {
20574 return qe_invalid;
20575 }
20576
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_igetw(&temp_zinit.max_arrows,f,true))
20577 {
20578 return qe_invalid;
20579 }
20580
20581 4 }
20582
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if ( s_version >= 20 )
20583 {
20584
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_igetw(&temp_zinit.heroStep,f,true))
20585 {
20586 return qe_invalid;
20587 }
20588 4 }
20589 else
20590 {
20591 59 temp_zinit.heroStep = 150; //1.5 pixels per frame
20592 }
20593
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if ( s_version >= 21 )
20594 {
20595
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_igetw(&temp_zinit.subscrSpeed,f,true))
20596 {
20597 return qe_invalid;
20598 }
20599 4 }
20600 else
20601 {
20602 59 temp_zinit.subscrSpeed = 1; //3 pixels per frame
20603 }
20604 //old only
20605
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
63 if((Header->zelda_version == 0x192)&&(Header->build<174))
20606 {
20607 byte items2;
20608
20609 if(!p_getc(&items2,f,true))
20610 {
20611 return qe_invalid;
20612 }
20613
20614 temp_zinit.items[iDinsFire]=(get_bit(&items2, idI_DFIRE)!=0);
20615 temp_zinit.items[iFaroresWind]=(get_bit(&items2, idI_FWIND)!=0);
20616 temp_zinit.items[iNayrusLove]=(get_bit(&items2, idI_NLOVE)!=0);
20617 }
20618
20619
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(Header->zelda_version < 0x193)
20620 {
20621 for(int32_t q=0; q<96; q++)
20622 {
20623 if(!p_getc(&padding,f,true))
20624 {
20625 return qe_invalid;
20626 }
20627 }
20628
20629 //new only
20630 if((Header->zelda_version == 0x192)&&(Header->build>173))
20631 {
20632 if(!p_getc(&padding,f,true))
20633 {
20634 return qe_invalid;
20635 }
20636
20637 if(!p_getc(&padding,f,true))
20638 {
20639 return qe_invalid;
20640 }
20641 }
20642 }
20643 63 }
20644
20645
3/6
✓ Branch 0 taken 63 times.
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
118 if((Header->zelda_version < 0x211)||((Header->zelda_version == 0x211)&&(Header->build<15)))
20646 {
20647 //temp_zinit.shield=i_smallshield;
20648
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 55 times.
55 int32_t sshieldid = getItemID(itemsbuf, itype_shield, i_smallshield);
20649
20650 if(sshieldid != -1)
20651 temp_zinit.items[sshieldid] = true;
20652 }
20653
20654
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<27)))
20655 {
20656 temp_zinit.hc=3;
20657 temp_zinit.start_heart=3;
20658 temp_zinit.cont_heart=3;
20659 temp_zinit.max_bombs=8;
20660 }
20661
20662
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<50)))
20663 {
20664 sword_hearts[0]=0;
20665 sword_hearts[1]=5;
20666 sword_hearts[2]=12;
20667 sword_hearts[3]=21;
20668 }
20669
20670
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<51)))
20671 {
20672 temp_zinit.last_map=0;
20673 temp_zinit.last_screen=0;
20674 }
20675
20676
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<68)))
20677 {
20678 temp_zinit.max_magic=0;
20679 temp_zinit.magic=0;
20680 set_bit(temp_zinit.misc,idM_DOUBLEMAGIC,0);
20681 }
20682
20683
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<129)))
20684 {
20685
20686 for(int32_t x=0; x<4; x++)
20687 {
20688 beam_hearts[x]=100;
20689 }
20690
20691 for(int32_t i=0; i<idBP_MAX; i++)
20692 {
20693 set_bit(&beam_percent,i,!get_bit(quest_rules,qr_LENSHINTS+i));
20694 set_bit(quest_rules,qr_LENSHINTS+i,0);
20695 }
20696
20697 for(int32_t x=0; x<4; x++)
20698 {
20699 beam_power[x]=get_bit(quest_rules,qr_HIDECARRIEDITEMS)?50:100;
20700 }
20701
20702 set_bit(quest_rules,qr_HIDECARRIEDITEMS,0);
20703 hookshot_links=100;
20704 temp_zinit.msg_more_x=224;
20705 temp_zinit.msg_more_y=64;
20706 }
20707
20708 // Okay, let's put these legacy values into itemsbuf.
20709
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(s_version < 15)
20710 for(int32_t i=0; i<MAXITEMS; i++)
20711 {
20712 switch(i)
20713 {
20714 case iFairyStill:
20715 itemsbuf[i].misc1 = stationary_fairy_hearts;
20716 itemsbuf[i].misc2 = stationary_fairy_magic;
20717 itemsbuf[i].misc3 = 0;
20718 itemsbuf[i].flags |= stationary_fairy_heart_percent ? ITEM_FLAG1 : 0;
20719 itemsbuf[i].flags |= stationary_fairy_magic_percent ? ITEM_FLAG2 : 0;
20720 break;
20721
20722 case iFairyMoving:
20723 itemsbuf[i].misc1 = moving_fairy_hearts;
20724 itemsbuf[i].misc2 = moving_fairy_magic;
20725 itemsbuf[i].misc3 = 50;
20726 itemsbuf[i].flags |= moving_fairy_heart_percent ? ITEM_FLAG1 : 0;
20727 itemsbuf[i].flags |= moving_fairy_magic_percent ? ITEM_FLAG2 : 0;
20728 break;
20729
20730 case iRPotion:
20731 itemsbuf[i].misc1 = red_potion_hearts;
20732 itemsbuf[i].misc2 = red_potion_magic;
20733 itemsbuf[i].flags |= red_potion_heart_percent ? ITEM_FLAG1 : 0;
20734 itemsbuf[i].flags |= red_potion_magic_percent ? ITEM_FLAG2 : 0;
20735 break;
20736
20737 case iBPotion:
20738 itemsbuf[i].misc1 = blue_potion_hearts;
20739 itemsbuf[i].misc2 = blue_potion_magic;
20740 itemsbuf[i].flags |= blue_potion_heart_percent ? ITEM_FLAG1 : 0;
20741 itemsbuf[i].flags |= blue_potion_magic_percent ? ITEM_FLAG2 : 0;
20742 break;
20743
20744 case iSword:
20745 itemsbuf[i].pickup_hearts = sword_hearts[0];
20746 itemsbuf[i].misc1 = beam_hearts[0];
20747 itemsbuf[i].misc2 = beam_power[0];
20748 // It seems that ITEM_FLAG1 was already added by reset_itembuf()...
20749 itemsbuf[i].flags &= (!get_bit(&beam_percent,0)) ? ~ITEM_FLAG1 : ~0;
20750 break;
20751
20752 case iWSword:
20753 itemsbuf[i].pickup_hearts = sword_hearts[1];
20754 itemsbuf[i].misc1 = beam_hearts[1];
20755 itemsbuf[i].misc2 = beam_power[1];
20756 itemsbuf[i].flags &= (!get_bit(&beam_percent,1)) ? ~ITEM_FLAG1 : ~0;
20757 break;
20758
20759 case iMSword:
20760 itemsbuf[i].pickup_hearts = sword_hearts[2];
20761 itemsbuf[i].misc1 = beam_hearts[2];
20762 itemsbuf[i].misc2 = beam_power[2];
20763 itemsbuf[i].flags &= (!get_bit(&beam_percent,2)) ? ~ITEM_FLAG1 : ~0;
20764 break;
20765
20766 case iXSword:
20767 itemsbuf[i].pickup_hearts = sword_hearts[3];
20768 itemsbuf[i].misc1 = beam_hearts[3];
20769 itemsbuf[i].misc2 = beam_power[3];
20770 itemsbuf[i].flags &= (!get_bit(&beam_percent,3)) ? ~ITEM_FLAG1 : ~0;
20771 break;
20772
20773 case iHookshot:
20774 itemsbuf[i].misc1 = hookshot_length;
20775 itemsbuf[i].misc2 = hookshot_links;
20776 break;
20777
20778 case iLongshot:
20779 itemsbuf[i].misc1 = longshot_length;
20780 itemsbuf[i].misc2 = longshot_links;
20781 break;
20782 }
20783 }
20784
20785
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<168)))
20786 {
20787 //was new subscreen rule
20788 temp_zinit.subscreen=get_bit(quest_rules,qr_FREEFORM)?1:0;
20789 set_bit(quest_rules,qr_FREEFORM,0);
20790 }
20791
20792
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<185)))
20793 {
20794 temp_zinit.start_dmap=0;
20795 }
20796
20797
2/6
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if((Header->zelda_version < 0x192)||((Header->zelda_version == 0x192)&&(Header->build<186)))
20798 {
20799 temp_zinit.heroAnimationStyle=get_bit(quest_rules,qr_BSZELDA)?1:0;
20800 }
20801
20802
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if(s_version < 16 && get_bit(deprecated_rules, qr_COOLSCROLL+1))
20803 {
20804 //addOldStyleFamily(&temp_zinit, itemsbuf, itype_wallet, 4); //is this needed?
20805 temp_zinit.max_rupees=999;
20806 //temp_zinit.rupies=999; //This rule only gave you an invisible max wallet; it did not give you max rupies.
20807 }
20808
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(Header->zelda_version < 0x190) //1.84 bugfix. -Z
20809 {
20810 //temp_zinit.items[iBombBag] = true; //No, this is 30 max bombs!
20811 temp_zinit.max_bombs = 8;
20812 }
20813 // al_trace("About to copy over new init data values for quest made in: %x\n", Header->zelda_version);
20814 //time to ensure that we port all new values properly:
20815
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(Header->zelda_version < 0x250)
20816 {
20817 temp_zinit.max_sbombs = temp_zinit.bomb_ratio > 0 ? ( temp_zinit.max_bombs/temp_zinit.bomb_ratio ) : (temp_zinit.max_bombs/4);
20818 }
20819
20820
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version > 21)
20821 {
20822
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_getc(&temp_zinit.hp_per_heart,f,true))
20823 {
20824 return qe_invalid;
20825 }
20826
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_getc(&temp_zinit.magic_per_block,f,true))
20827 {
20828 return qe_invalid;
20829 }
20830
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_getc(&temp_zinit.hero_damage_multiplier,f,true))
20831 {
20832 return qe_invalid;
20833 }
20834
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_getc(&temp_zinit.ene_damage_multiplier,f,true))
20835 {
20836 return qe_invalid;
20837 }
20838 4 }
20839 else
20840 {
20841 59 temp_zinit.hp_per_heart = 16; //HP_PER_HEART, previously hardcoded
20842 59 temp_zinit.magic_per_block = 32; //MAGICPERBLOCK, previously hardcoded
20843 59 temp_zinit.hero_damage_multiplier = 2; //DAMAGE_MULTIPLIER, previously hardcoded
20844 59 temp_zinit.ene_damage_multiplier = 4; //(HP_PER_HEART/4), previously hardcoded
20845 }
20846
20847
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version > 22)
20848 {
20849
2/2
✓ Branch 0 taken 100 times.
✓ Branch 1 taken 4 times.
104 for(int32_t q = 0; q < 25; ++q)
20850 {
20851
2/4
✓ Branch 0 taken 100 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 100 times.
100 if(!p_igetw(&temp_zinit.scrcnt[q],f,true))
20852 {
20853 return qe_invalid;
20854 }
20855 100 }
20856
2/2
✓ Branch 0 taken 100 times.
✓ Branch 1 taken 4 times.
104 for(int32_t q = 0; q < 25; ++q)
20857 {
20858
2/4
✓ Branch 0 taken 100 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 100 times.
100 if(!p_igetw(&temp_zinit.scrmaxcnt[q],f,true))
20859 {
20860 return qe_invalid;
20861 }
20862 100 }
20863 4 }
20864 else
20865 {
20866
2/2
✓ Branch 0 taken 1475 times.
✓ Branch 1 taken 59 times.
1534 for(int32_t q = 0; q < 25; ++q)
20867 {
20868 1475 temp_zinit.scrcnt[q] = 0;
20869 1475 temp_zinit.scrmaxcnt[q] = 0;
20870 1475 }
20871 }
20872
20873
20874
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version > 23)
20875 {
20876
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_getc(&temp_zinit.dither_type,f,true))
20877 {
20878 return qe_invalid;
20879 }
20880
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_getc(&temp_zinit.dither_arg,f,true))
20881 {
20882 return qe_invalid;
20883 }
20884
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_getc(&temp_zinit.dither_percent,f,true))
20885 {
20886 return qe_invalid;
20887 }
20888
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_getc(&temp_zinit.def_lightrad,f,true))
20889 {
20890 return qe_invalid;
20891 }
20892
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_getc(&temp_zinit.transdark_percent,f,true))
20893 {
20894 return qe_invalid;
20895 }
20896 4 }
20897 else
20898 {
20899 59 temp_zinit.dither_type = 0;
20900 59 temp_zinit.dither_arg = 0;
20901 59 temp_zinit.dither_percent = 20;
20902 59 temp_zinit.def_lightrad = 24;
20903 59 temp_zinit.transdark_percent = 0;
20904 }
20905
20906
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version > 24)
20907 {
20908
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_getc(&temp_zinit.darkcol,f,true))
20909 {
20910 return qe_invalid;
20911 }
20912 4 }
20913 else
20914 {
20915 59 temp_zinit.darkcol = BLACK;
20916 }
20917
20918
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version > 25)
20919 {
20920
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_igetl(&temp_zinit.gravity2,f,true))
20921 {
20922 return qe_invalid;
20923 }
20924
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_igetl(&temp_zinit.swimgravity,f,true))
20925 {
20926 return qe_invalid;
20927 }
20928 4 }
20929 else
20930 {
20931 59 temp_zinit.gravity2 = temp_zinit.gravity*100;
20932 59 temp_zinit.swimgravity = 5;
20933 }
20934
20935
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version > 26)
20936 {
20937
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_igetw(&temp_zinit.heroSideswimUpStep,f,true))
20938 {
20939 return qe_invalid;
20940 }
20941
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_igetw(&temp_zinit.heroSideswimSideStep,f,true))
20942 {
20943 return qe_invalid;
20944 }
20945
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_igetw(&temp_zinit.heroSideswimDownStep,f,true))
20946 {
20947 return qe_invalid;
20948 }
20949 4 }
20950 else
20951 {
20952 59 temp_zinit.heroSideswimUpStep = 150;
20953 59 temp_zinit.heroSideswimSideStep = 100;
20954 59 temp_zinit.heroSideswimDownStep = 75;
20955 }
20956
20957
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version > 27)
20958 {
20959
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_igetl(&temp_zinit.exitWaterJump,f,true))
20960 {
20961 return qe_invalid;
20962 }
20963 4 }
20964 else
20965 {
20966 59 temp_zinit.exitWaterJump = 0;
20967 }
20968
20969
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version > 29)
20970 {
20971
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_igetl(&temp_zinit.bunny_ltm,f,true))
20972 {
20973 return qe_invalid;
20974 }
20975 4 }
20976 else
20977 {
20978 59 temp_zinit.bunny_ltm = 0;
20979 }
20980
20981
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version > 30)
20982 {
20983
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_getc(&temp_zinit.switchhookstyle,f,true))
20984 {
20985 return qe_invalid;
20986 }
20987 4 }
20988 else
20989 {
20990 59 temp_zinit.switchhookstyle = 1;
20991 }
20992
20993
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 59 times.
63 if(s_version > 31)
20994 {
20995
2/4
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
4 if(!p_getc(&temp_zinit.magicdrainrate,f,true))
20996 {
20997 return qe_invalid;
20998 }
20999 4 }
21000 else
21001 {
21002
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 temp_zinit.magicdrainrate = (get_bit(temp_zinit.misc,idM_DOUBLEMAGIC) ? 1 : 2);
21003
1/2
✓ Branch 0 taken 59 times.
✗ Branch 1 not taken.
59 set_bit(temp_zinit.misc,idM_DOUBLEMAGIC,0);
21004 }
21005
21006
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 temp_zinit.clear_genscript();
21007
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 62 times.
63 if(s_version > 32)
21008 {
21009 1 word numgenscript = 0;
21010
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 if(!p_igetw(&numgenscript,f,true))
21011 return qe_invalid;
21012
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 for(auto q = 1; q < numgenscript; ++q)
21013 {
21014
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 if(!p_getc(&padding,f,true))
21015 return qe_invalid;
21016
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if(!(padding&2))
21017 continue;
21018 1 temp_zinit.gen_doscript[q] = padding&1;
21019
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 if(!p_igetw(&temp_zinit.gen_exitState[q],f,true))
21020 return qe_invalid;
21021
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 if(!p_igetw(&temp_zinit.gen_reloadState[q],f,true))
21022 return qe_invalid;
21023
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 8 times.
9 for(auto p = 0; p < 8; ++p)
21024
2/4
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
8 if(!p_igetl(&temp_zinit.gen_initd[q][p],f,true))
21025 return qe_invalid;
21026
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 if(!p_igetl(&temp_zinit.gen_dataSize[q],f,true))
21027 return qe_invalid;
21028
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
1 if(!p_getlvec<int32_t>(&temp_zinit.gen_data[q],f,true))
21029 return qe_invalid;
21030
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
1 if(!p_igetl(&temp_zinit.gen_eventstate[q],f,true))
21031 return qe_invalid;
21032 1 }
21033 1 }
21034
21035
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(keepdata==true)
21036 {
21037
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 zinit = temp_zinit;
21038
21039
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(zinit.heroAnimationStyle==las_zelda3slow)
21040 {
21041 hero_animation_speed=2;
21042 }
21043 else
21044 {
21045 63 hero_animation_speed=1;
21046 }
21047 63 }
21048
21049 63 return 0;
21050 299 }
21051
21052 /*
21053 void setupitemdropsets()
21054 {
21055 for(int32_t i=0; i<isMAX; i++)
21056 {
21057 memcpy(&item_drop_sets[i], &default_item_drop_sets[i], sizeof(item_drop_object));
21058 }
21059 }
21060 */
21061
21062 63 int32_t readitemdropsets(PACKFILE *f, int32_t version, word build, bool keepdata)
21063 {
21064 63 build=build; // here to prevent compiler warnings
21065 dword dummy_dword;
21066 63 word item_drop_sets_to_read=0;
21067 item_drop_object tempitemdrop;
21068 63 word s_version=0, s_cversion=0;
21069
21070
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(keepdata)
21071 {
21072
2/2
✓ Branch 0 taken 16128 times.
✓ Branch 1 taken 63 times.
16191 for(int32_t i=0; i<MAXITEMDROPSETS; i++)
21073 {
21074 16128 memset(&item_drop_sets[i], 0, sizeof(item_drop_object));
21075 16128 }
21076 63 }
21077
21078
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(version > 0x192)
21079 {
21080 63 item_drop_sets_to_read=0;
21081
21082 //section version info
21083
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_version,f,true))
21084 {
21085 return qe_invalid;
21086 }
21087
21088 63 FFCore.quest_format[vItemDropsets] = s_version;
21089
21090 //al_trace("Item drop sets version %d\n", s_version);
21091
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_cversion,f,true))
21092 {
21093 return qe_invalid;
21094 }
21095
21096 //section size
21097
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy_dword,f,true))
21098 {
21099 return qe_invalid;
21100 }
21101
21102 //finally... section data
21103
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&item_drop_sets_to_read,f,true))
21104 {
21105 return qe_invalid;
21106 }
21107 63 }
21108 else
21109 {
21110 if(keepdata==true)
21111 {
21112 init_item_drop_sets();
21113 }
21114 }
21115
21116
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(s_version>=1)
21117 {
21118
2/2
✓ Branch 0 taken 1241 times.
✓ Branch 1 taken 63 times.
1304 for(int32_t i=0; i<item_drop_sets_to_read; i++)
21119 {
21120
1/2
✓ Branch 0 taken 1241 times.
✗ Branch 1 not taken.
1241 if(!pfread(tempitemdrop.name,sizeof(tempitemdrop.name),f,true))
21121 {
21122 return qe_invalid;
21123 }
21124
21125
2/2
✓ Branch 0 taken 12410 times.
✓ Branch 1 taken 1241 times.
13651 for(int32_t j=0; j<10; ++j)
21126 {
21127
1/2
✓ Branch 0 taken 12410 times.
✗ Branch 1 not taken.
12410 if(!p_igetw(&tempitemdrop.item[j],f,true))
21128 {
21129 return qe_invalid;
21130 }
21131 12410 }
21132
21133
2/2
✓ Branch 0 taken 13651 times.
✓ Branch 1 taken 1241 times.
14892 for(int32_t j=0; j<11; ++j)
21134 {
21135
1/2
✓ Branch 0 taken 13651 times.
✗ Branch 1 not taken.
13651 if(!p_igetw(&tempitemdrop.chance[j],f,true))
21136 {
21137 return qe_invalid;
21138 }
21139 13651 }
21140
21141 // Dec 2008: Addition of the 'Tall Grass' set, #12,
21142 // overrides the quest's set #12.
21143
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 1241 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1241 if(s_version<2 && i==12)
21144 continue;
21145
21146 // Deprecated: qr_NOCLOCKS and qr_ALLOW10RUPEEDROPS
21147
1/4
✓ Branch 0 taken 1241 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1241 if(s_version<2) for(int32_t j=0; j<10; ++j)
21148 {
21149 int32_t it = tempitemdrop.item[j];
21150
21151 if((itemsbuf[it].family == itype_rupee
21152 && ((itemsbuf[it].amount)&0xFFF) == 10)
21153 && !get_bit(deprecated_rules, qr_ALLOW10RUPEEDROPS_DEP))
21154 {
21155 tempitemdrop.chance[j+1]=0;
21156 }
21157 else if(itemsbuf[it].family == itype_clock && get_bit(deprecated_rules, qr_NOCLOCKS_DEP))
21158 {
21159 tempitemdrop.chance[j+1]=0;
21160 }
21161
21162 // From Sept 2007 to Dec 2008, non-gameplay items were prohibited.
21163 if(itemsbuf[it].family == itype_misc)
21164 {
21165 // If a non-gameplay item was selected, then item drop was aborted.
21166 // Reflect this by increasing the 'Nothing' chance accordingly.
21167 tempitemdrop.chance[0]+=tempitemdrop.chance[j+1];
21168 tempitemdrop.chance[j+1]=0;
21169 }
21170 }
21171
21172
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1241 times.
1241 if(keepdata)
21173 {
21174 1241 memcpy(&item_drop_sets[i], &tempitemdrop, sizeof(item_drop_object));
21175 1241 }
21176 1241 }
21177 63 }
21178
21179 63 return 0;
21180 63 }
21181
21182 63 int32_t readfavorites(PACKFILE *f, int32_t, word, bool keepdata)
21183 {
21184 int32_t temp_num;
21185 dword dummy_dword;
21186 word num_favorite_combos;
21187 word num_favorite_combo_aliases;
21188 63 word s_version=0, s_cversion=0;
21189
21190 //section version info
21191
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(!p_igetw(&s_version,f,true))
21192 {
21193 return qe_invalid;
21194 }
21195
21196 63 FFCore.quest_format[vFavourites] = s_version;
21197
21198
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&s_cversion,f,true))
21199 {
21200 return qe_invalid;
21201 }
21202
21203 //section size
21204
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetl(&dummy_dword,f,true))
21205 {
21206 return qe_invalid;
21207 }
21208
21209 //finally... section data
21210
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&num_favorite_combos,f,true))
21211 {
21212 return qe_invalid;
21213 }
21214
21215
2/2
✓ Branch 0 taken 6300 times.
✓ Branch 1 taken 63 times.
6363 for(int32_t i=0; i<num_favorite_combos; i++)
21216 {
21217
1/2
✓ Branch 0 taken 6300 times.
✗ Branch 1 not taken.
6300 if(!p_igetl(&temp_num,f,true))
21218 {
21219 return qe_invalid;
21220 }
21221
21222
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6300 times.
6300 if(keepdata)
21223 {
21224 6300 favorite_combos[i]=temp_num;
21225 6300 }
21226 6300 }
21227
21228
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_igetw(&num_favorite_combo_aliases,f,true))
21229 {
21230 return qe_invalid;
21231 }
21232
21233
2/2
✓ Branch 0 taken 6300 times.
✓ Branch 1 taken 63 times.
6363 for(int32_t i=0; i<num_favorite_combo_aliases; i++)
21234 {
21235
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6300 times.
6300 if(!p_igetl(&temp_num,f,true))
21236 {
21237 return qe_invalid;
21238 }
21239
21240
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 6300 times.
6300 if(keepdata)
21241 {
21242 6300 favorite_comboaliases[i]=temp_num;
21243 6300 }
21244 6300 }
21245
21246 63 return 0;
21247 63 }
21248
21249 /*
21250 switch (ret) {
21251 case 0:
21252 break;
21253
21254 case qe_invalid:
21255 goto invalid;
21256 break;
21257 default:
21258 pack_fclose(f);
21259 if(!oldquest)
21260 delete_file(tmpfilename);
21261 return ret;
21262 break;
21263 }
21264 */
21265
21266 const char *skip_text[skip_max]=
21267 {
21268 "skip_header", "skip_rules", "skip_strings", "skip_misc",
21269 "skip_tiles", "skip_combos", "skip_comboaliases", "skip_csets",
21270 "skip_maps", "skip_dmaps", "skip_doors", "skip_items",
21271 "skip_weapons", "skip_colors", "skip_icons", "skip_initdata",
21272 "skip_guys", "skip_herosprites", "skip_subscreens", "skip_ffscript",
21273 "skip_sfx", "skip_midis", "skip_cheats", "skip_itemdropsets",
21274 "skip_favorites"
21275 };
21276
21277
21278 void port250QuestRules(){
21279
21280 portCandleRules(); //Candle
21281 portBombRules();
21282
21283 }
21284
21285 void portCandleRules()
21286 {
21287 bool hurtshero = get_bit(quest_rules,qr_FIREPROOFHERO);
21288 //itemdata itemsbuf;
21289 for ( int32_t q = 0; q < MAXITEMS; q++ )
21290 {
21291 if ( itemsbuf[q].family == itype_candle )
21292 {
21293 if ( hurtshero ) itemsbuf[q].flags |= ITEM_FLAG2;
21294 else itemsbuf[q].flags &= ~ ITEM_FLAG2;
21295 }
21296 }
21297 }
21298
21299 void portBombRules()
21300 {
21301 bool hurtshero = get_bit(quest_rules,qr_OUCHBOMBS);
21302 //itemdata itemsbuf;
21303 for ( int32_t q = 0; q < MAXITEMS; q++ )
21304 {
21305 if ( itemsbuf[q].family == itype_bomb )
21306 {
21307 if ( hurtshero ) itemsbuf[q].flags |= ITEM_FLAG2;
21308 else itemsbuf[q].flags &= ~ ITEM_FLAG2;
21309 }
21310 }
21311
21312 }
21313
21314 //Internal function for loadquest wrapper
21315 63 int32_t _lq_int(const char *filename, zquestheader *Header, miscQdata *Misc, zctune *tunes, bool show_progress, bool compressed, bool encrypted, bool keepall, const byte *skip_flags, byte printmetadata)
21316 {
21317 63 DMapEditorLastMaptileUsed = 0;
21318 63 combosread=false;
21319 63 mapsread=false;
21320 63 fixffcs=false;
21321
21322
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if(get_debug()&&(key[KEY_LSHIFT]||key[KEY_RSHIFT]))
21323 {
21324 keepall=false;
21325 jwin_alert("Load Quest","Data retention disabled.",NULL,NULL,"OK",NULL,13,27,lfont);
21326 }
21327
21328 // show_progress=true;
21329 char tmpfilename[L_tmpnam];
21330 63 temp_name(tmpfilename);
21331 // char percent_done[30];
21332 63 bool catchup=false;
21333 byte tempbyte;
21334 63 word old_map_count=map_count;
21335
21336 63 byte old_quest_rules[QUESTRULES_NEW_SIZE] = {0};
21337 63 byte old_extra_rules[EXTRARULES_SIZE] = {0};
21338 63 byte old_midi_flags[MIDIFLAGS_SIZE] = {0};
21339
21340
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(keepall==false||get_bit(skip_flags, skip_rules))
21341 {
21342 memcpy(old_quest_rules, quest_rules, QUESTRULES_NEW_SIZE);
21343 memcpy(old_extra_rules, extra_rules, EXTRARULES_SIZE);
21344 }
21345
21346 63 memset(quest_rules, 0, QUESTRULES_NEW_SIZE); //clear here to prevent any kind of carryover -Z
21347 // memset(extra_rules, 0, EXTRARULES_SIZE); //clear here to prevent any kind of carryover -Z
21348
21349
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(keepall==false||get_bit(skip_flags, skip_midis))
21350 {
21351 memcpy(old_midi_flags, midi_flags, MIDIFLAGS_SIZE);
21352 }
21353
21354
21355
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(keepall&&!get_bit(skip_flags, skip_ffscript))
21356 {
21357 63 zScript.clear();
21358 63 globalmap.clear();
21359 63 genericmap.clear();
21360 63 ffcmap.clear();
21361 63 itemmap.clear();
21362 63 npcmap.clear();
21363 63 ewpnmap.clear();
21364 63 lwpnmap.clear();
21365 63 playermap.clear();
21366 63 dmapmap.clear();
21367 63 screenmap.clear();
21368 63 itemspritemap.clear();
21369 63 comboscriptmap.clear();
21370
21371
2/2
✓ Branch 0 taken 32193 times.
✓ Branch 1 taken 63 times.
32256 for(int32_t i=0; i<NUMSCRIPTFFC-1; i++)
21372 {
21373 32193 ffcmap[i].clear();
21374 32193 }
21375
21376 63 globalmap[0].slotname = "Slot 1:";
21377 63 globalmap[0].scriptname = "~Init";
21378 63 globalmap[0].update();
21379
21380
2/2
✓ Branch 0 taken 441 times.
✓ Branch 1 taken 63 times.
504 for(int32_t i=1; i<NUMSCRIPTGLOBAL; i++)
21381 {
21382 441 globalmap[i].clear();
21383 441 }
21384
21385
2/2
✓ Branch 0 taken 16065 times.
✓ Branch 1 taken 63 times.
16128 for(int32_t i=0; i<NUMSCRIPTITEM-1; i++)
21386 {
21387 16065 itemmap[i].clear();
21388 16065 }
21389
21390 //new script types -- prevent carrying over to a quest that you load after reading them
21391 //e.g., a quest has an npc script, and you make a blank quest, that now believes that it has an npc script, too!
21392
2/2
✓ Branch 0 taken 16065 times.
✓ Branch 1 taken 63 times.
16128 for(int32_t i=0; i<NUMSCRIPTGUYS-1; i++)
21393 {
21394 16065 npcmap[i].clear();
21395 16065 }
21396
2/2
✓ Branch 0 taken 16065 times.
✓ Branch 1 taken 63 times.
16128 for(int32_t i=0; i<NUMSCRIPTWEAPONS-1; i++)
21397 {
21398 16065 lwpnmap[i].clear();
21399 16065 }
21400
2/2
✓ Branch 0 taken 16065 times.
✓ Branch 1 taken 63 times.
16128 for(int32_t i=0; i<NUMSCRIPTWEAPONS-1; i++)
21401 {
21402 16065 ewpnmap[i].clear();
21403 16065 }
21404
2/2
✓ Branch 0 taken 252 times.
✓ Branch 1 taken 63 times.
315 for(int32_t i=0; i<NUMSCRIPTPLAYER-1; i++)
21405 {
21406 252 playermap[i].clear();
21407 252 }
21408
2/2
✓ Branch 0 taken 16065 times.
✓ Branch 1 taken 63 times.
16128 for(int32_t i=0; i<NUMSCRIPTSDMAP-1; i++)
21409 {
21410 16065 dmapmap[i].clear();
21411 16065 }
21412
2/2
✓ Branch 0 taken 16065 times.
✓ Branch 1 taken 63 times.
16128 for(int32_t i=0; i<NUMSCRIPTSCREEN-1; i++)
21413 {
21414 16065 screenmap[i].clear();
21415 16065 }
21416
2/2
✓ Branch 0 taken 16065 times.
✓ Branch 1 taken 63 times.
16128 for(int32_t i=0; i<NUMSCRIPTSITEMSPRITE-1; i++)
21417 {
21418 16065 itemspritemap[i].clear();
21419 16065 }
21420
2/2
✓ Branch 0 taken 32193 times.
✓ Branch 1 taken 63 times.
32256 for(int32_t i=0; i<NUMSCRIPTSCOMBODATA-1; i++)
21421 {
21422 32193 comboscriptmap[i].clear();
21423 32193 }
21424
2/2
✓ Branch 0 taken 32193 times.
✓ Branch 1 taken 63 times.
32256 for(int32_t i=0; i<NUMSCRIPTSGENERIC-1; i++)
21425 {
21426 32193 genericmap[i].clear();
21427 32193 }
21428
21429 63 reset_scripts();
21430 63 }
21431
21432 zquestheader tempheader;
21433 63 memset(&tempheader, 0, sizeof(zquestheader));
21434 63 zinfo tempzi;
21435 63 tempzi.clear();
21436 63 load_tmp_zi = &tempzi;
21437
21438 // oldquest flag is set when an unencrypted qst file is suspected.
21439 63 bool oldquest = false;
21440 63 int32_t open_error=0;
21441 char deletefilename[1024];
21442 63 PACKFILE *f=open_quest_file(&open_error, filename, deletefilename, compressed, encrypted, show_progress);
21443
21444
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(!f)
21445 return open_error;
21446 char zinfofilename[2048];
21447 63 replace_extension(zinfofilename, filename, "zinfo", 2047);
21448 63 int32_t ret=0;
21449
21450 //header
21451 63 box_out("Reading Header...");
21452 63 ret=readheader(f, &tempheader, true, printmetadata);
21453
1/5
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21454 63 box_out("okay.");
21455 63 box_eol();
21456
21457
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 4 times.
63 if(read_zinfo)
21458 {
21459 4 box_out("Reading ZInfo - ");
21460
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
4 box_out(read_ext_zinfo ? "External..." : "Internal...");
21461
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
4 if(read_ext_zinfo)
21462 {
21463 1 PACKFILE *inf=pack_fopen_password(zinfofilename, F_READ, "");
21464 1 ret=readzinfo(inf, tempzi, tempheader);
21465
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 if(inf) pack_fclose(inf);
21466
1/5
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
1 checkstatus(ret);
21467 1 }
21468 else
21469 {
21470 3 ret=readzinfo(f, tempzi, tempheader);
21471
1/5
✗ Branch 0 not taken.
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
3 checkstatus(ret);
21472 }
21473 4 box_out("okay.");
21474 4 box_eol();
21475 4 }
21476
21477
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(tempheader.zelda_version>=0x193)
21478 {
21479 dword section_id;
21480
21481 //section id
21482
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(!p_mgetl(&section_id,f,true))
21483 {
21484 return qe_invalid;
21485 }
21486
21487
2/2
✓ Branch 0 taken 1512 times.
✓ Branch 1 taken 63 times.
1575 while(!pack_feof(f))
21488 {
21489
24/25
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
✓ Branch 2 taken 63 times.
✓ Branch 3 taken 63 times.
✓ Branch 4 taken 63 times.
✓ Branch 5 taken 63 times.
✓ Branch 6 taken 63 times.
✓ Branch 7 taken 63 times.
✓ Branch 8 taken 63 times.
✓ Branch 9 taken 63 times.
✓ Branch 10 taken 63 times.
✓ Branch 11 taken 63 times.
✓ Branch 12 taken 63 times.
✓ Branch 13 taken 63 times.
✓ Branch 14 taken 63 times.
✓ Branch 15 taken 63 times.
✓ Branch 16 taken 63 times.
✓ Branch 17 taken 63 times.
✓ Branch 18 taken 63 times.
✓ Branch 19 taken 63 times.
✓ Branch 20 taken 63 times.
✓ Branch 21 taken 63 times.
✓ Branch 22 taken 63 times.
✓ Branch 23 taken 63 times.
✓ Branch 24 taken 63 times.
1512 switch(section_id)
21490 {
21491 case ID_RULES:
21492
21493 //rules
21494
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21495 {
21496 box_out("found.");
21497 box_eol();
21498 catchup=false;
21499 }
21500
21501 63 box_out("Reading Rules...");
21502
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readrules(f, &tempheader, keepall&&!get_bit(skip_flags, skip_rules));
21503
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21504 63 box_out("okay.");
21505 63 box_eol();
21506 63 break;
21507
21508 case ID_STRINGS:
21509
21510 //strings
21511
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21512 {
21513 box_out("found.");
21514 box_eol();
21515 catchup=false;
21516 }
21517
21518 63 box_out("Reading Strings...");
21519
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readstrings(f, &tempheader, keepall&&!get_bit(skip_flags, skip_strings));
21520
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21521 63 box_out("okay.");
21522 63 box_eol();
21523 63 break;
21524
21525 case ID_MISC:
21526
21527 //misc data
21528
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21529 {
21530 box_out("found.");
21531 box_eol();
21532 catchup=false;
21533 }
21534
21535 63 box_out("Reading Misc. Data...");
21536
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readmisc(f, &tempheader, Misc, keepall&&!get_bit(skip_flags, skip_misc));
21537
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21538 63 box_out("okay.");
21539 63 box_eol();
21540 63 break;
21541
21542 case ID_TILES:
21543
21544 //tiles
21545
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21546 {
21547 box_out("found.");
21548 box_eol();
21549 catchup=false;
21550 }
21551
21552 63 box_out("Reading Tiles...");
21553
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readtiles(f, newtilebuf, &tempheader, tempheader.zelda_version, tempheader.build, 0, NEWMAXTILES, false, keepall&&!get_bit(skip_flags, skip_tiles));
21554
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21555 63 box_out("okay.");
21556 63 box_eol();
21557 63 break;
21558
21559 case ID_COMBOS:
21560
21561 //combos
21562
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21563 {
21564 box_out("found.");
21565 box_eol();
21566 catchup=false;
21567 }
21568
21569 63 box_out("Reading Combos...");
21570
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readcombos(f, &tempheader, tempheader.zelda_version, tempheader.build, 0, MAXCOMBOS, keepall&&!get_bit(skip_flags, skip_combos));
21571 63 combosread=true;
21572
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21573 63 box_out("okay.");
21574 63 box_eol();
21575 63 break;
21576
21577 case ID_COMBOALIASES:
21578
21579 //combo aliases
21580
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21581 {
21582 box_out("found.");
21583 box_eol();
21584 catchup=false;
21585 }
21586
21587 63 box_out("Reading Combo Aliases...");
21588
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readcomboaliases(f, &tempheader, tempheader.zelda_version, tempheader.build, keepall&&!get_bit(skip_flags, skip_comboaliases));
21589
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21590 63 box_out("okay.");
21591 63 box_eol();
21592 63 break;
21593
21594 case ID_CSETS:
21595
21596 //color data
21597
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21598 {
21599 box_out("found.");
21600 box_eol();
21601 catchup=false;
21602 }
21603
21604 63 box_out("Reading Color Data...");
21605
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readcolordata(f, Misc, tempheader.zelda_version, tempheader.build, 0, newerpdTOTAL, keepall&&!get_bit(skip_flags, skip_csets));
21606
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21607 63 box_out("okay.");
21608 63 box_eol();
21609 63 break;
21610
21611 case ID_MAPS:
21612
21613 //maps
21614
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21615 {
21616 box_out("found.");
21617 box_eol();
21618 catchup=false;
21619 }
21620
21621 63 box_out("Reading Maps...");
21622
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readmaps(f, &tempheader, keepall&&!get_bit(skip_flags, skip_maps));
21623 63 mapsread=true;
21624
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21625 63 box_out("okay.");
21626 63 box_eol();
21627 63 break;
21628
21629 case ID_DMAPS:
21630
21631 //dmaps
21632
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21633 {
21634 box_out("found.");
21635 box_eol();
21636 catchup=false;
21637 }
21638
21639 63 box_out("Reading DMaps...");
21640
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readdmaps(f, &tempheader, tempheader.zelda_version, tempheader.build, 0, MAXDMAPS, keepall&&!get_bit(skip_flags, skip_dmaps));
21641
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21642 63 box_out("okay.");
21643 63 box_eol();
21644 63 break;
21645
21646 case ID_DOORS:
21647
21648 //door combo sets
21649
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21650 {
21651 box_out("found.");
21652 box_eol();
21653 catchup=false;
21654 }
21655
21656 63 box_out("Reading Doors...");
21657
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readdoorcombosets(f, &tempheader, keepall&&!get_bit(skip_flags, skip_doors));
21658
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21659 63 box_out("okay.");
21660 63 box_eol();
21661 63 break;
21662
21663 case ID_ITEMS:
21664
21665 //items
21666
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21667 {
21668 box_out("found.");
21669 box_eol();
21670 catchup=false;
21671 }
21672
21673 63 box_out("Reading Items...");
21674
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readitems(f, tempheader.zelda_version, tempheader.build, keepall&&!get_bit(skip_flags, skip_items));
21675
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21676
21677 63 box_out("okay.");
21678 63 box_eol();
21679 63 break;
21680
21681 case ID_WEAPONS:
21682
21683 //weapons
21684
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21685 {
21686 box_out("found.");
21687 box_eol();
21688 catchup=false;
21689 }
21690
21691 63 box_out("Reading Weapons...");
21692
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readweapons(f, &tempheader, keepall&&!get_bit(skip_flags, skip_weapons));
21693
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21694 63 box_out("okay.");
21695 63 box_eol();
21696 63 break;
21697
21698 case ID_COLORS:
21699
21700 //misc. colors
21701
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21702 {
21703 box_out("found.");
21704 box_eol();
21705 catchup=false;
21706 }
21707
21708 63 box_out("Reading Misc. Colors...");
21709
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readmisccolors(f, &tempheader, Misc, keepall&&!get_bit(skip_flags, skip_colors));
21710
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21711 63 box_out("okay.");
21712 63 box_eol();
21713 63 break;
21714
21715 case ID_ICONS:
21716
21717 //game icons
21718
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21719 {
21720 box_out("found.");
21721 box_eol();
21722 catchup=false;
21723 }
21724
21725 63 box_out("Reading Game Icons...");
21726
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readgameicons(f, &tempheader, Misc, keepall&&!get_bit(skip_flags, skip_icons));
21727
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21728 63 box_out("okay.");
21729 63 box_eol();
21730 63 break;
21731
21732 case ID_INITDATA:
21733
21734 //initialization data
21735
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21736 {
21737 box_out("found.");
21738 box_eol();
21739 catchup=false;
21740 }
21741
21742 63 box_out("Reading Init. Data...");
21743
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readinitdata(f, &tempheader, keepall&&!get_bit(skip_flags, skip_initdata));
21744
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21745 63 box_out("okay.");
21746 63 box_eol();
21747
21748
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(keepall&&!get_bit(skip_flags, skip_subscreens))
21749 {
21750
2/2
✓ Branch 0 taken 50 times.
✓ Branch 1 taken 13 times.
63 if(zinit.subscreen!=ssdtMAX) //not using custom subscreens
21751 {
21752 13 setupsubscreens();
21753
21754
2/2
✓ Branch 0 taken 6656 times.
✓ Branch 1 taken 13 times.
6669 for(int32_t i=0; i<MAXDMAPS; ++i)
21755 {
21756 6656 int32_t type=DMaps[i].type&dmfTYPE;
21757
2/2
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 6643 times.
6656 DMaps[i].active_subscreen=(type == dmOVERW || type == dmBSOVERW)?0:1;
21758 6656 DMaps[i].passive_subscreen=(get_bit(quest_rules,qr_ENABLEMAGIC))?0:1;
21759 6656 }
21760 13 }
21761 63 }
21762
21763
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(keepall&&!get_bit(skip_flags, skip_sfx))
21764 {
21765 63 setupsfx();
21766 63 }
21767
21768
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(keepall&&!get_bit(skip_flags, skip_itemdropsets))
21769 {
21770 63 init_item_drop_sets();
21771 63 }
21772
21773
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(keepall&&!get_bit(skip_flags, skip_favorites))
21774 {
21775 63 init_favorites();
21776 63 }
21777
21778 63 break;
21779
21780 case ID_GUYS:
21781
21782 //guys
21783
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21784 {
21785 box_out("found.");
21786 box_eol();
21787 catchup=false;
21788 }
21789
21790 63 box_out("Reading Custom Guy Data...");
21791
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readguys(f, &tempheader, keepall&&!get_bit(skip_flags, skip_guys));
21792
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21793 63 box_out("okay.");
21794 63 box_eol();
21795 63 break;
21796
21797 case ID_HEROSPRITES:
21798
21799 //player sprites
21800
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21801 {
21802 box_out("found.");
21803 box_eol();
21804 catchup=false;
21805 }
21806
21807 63 box_out("Reading Custom Player Sprite Data...");
21808
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readherosprites(f, &tempheader, keepall&&!get_bit(skip_flags, skip_herosprites));
21809
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21810 63 box_out("okay.");
21811 63 box_eol();
21812 63 break;
21813
21814 case ID_SUBSCREEN:
21815
21816 //custom subscreens
21817
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21818 {
21819 box_out("found.");
21820 box_eol();
21821 catchup=false;
21822 }
21823
21824 63 box_out("Reading Custom Subscreen Data...");
21825
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readsubscreens(f, &tempheader, keepall&&!get_bit(skip_flags, skip_subscreens));
21826
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21827 63 box_out("okay.");
21828 63 box_eol();
21829 63 break;
21830
21831 case ID_FFSCRIPT:
21832
21833 //Freeform combo scripts
21834
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21835 {
21836 box_out("found.");
21837 box_eol();
21838 catchup=false;
21839 }
21840
21841 63 box_out("Reading FF Script Data...");
21842
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readffscript(f, &tempheader, keepall&&!get_bit(skip_flags, skip_ffscript));
21843
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21844 63 box_out("okay.");
21845 63 box_eol();
21846 63 break;
21847
21848 case ID_SFX:
21849
21850 //SFX data
21851
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21852 {
21853 box_out("found.");
21854 box_eol();
21855 catchup=false;
21856 }
21857
21858 63 box_out("Reading SFX Data...");
21859
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readsfx(f, &tempheader, keepall&&!get_bit(skip_flags, skip_sfx));
21860
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21861 63 box_out("okay.");
21862 63 box_eol();
21863 63 break;
21864
21865 case ID_MIDIS:
21866
21867 //midis
21868
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21869 {
21870 box_out("found.");
21871 box_eol();
21872 catchup=false;
21873 }
21874
21875 63 box_out("Reading Tunes...");
21876
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readtunes(f, &tempheader, tunes, keepall&&!get_bit(skip_flags, skip_midis));
21877
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21878 63 box_out("okay.");
21879 63 box_eol();
21880 63 break;
21881
21882 case ID_CHEATS:
21883
21884 //cheat codes
21885
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21886 {
21887 box_out("found.");
21888 box_eol();
21889 catchup=false;
21890 }
21891
21892 63 box_out("Reading Cheat Codes...");
21893
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readcheatcodes(f, &tempheader, keepall&&!get_bit(skip_flags, skip_cheats));
21894
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21895 63 box_out("okay.");
21896 63 box_eol();
21897 63 break;
21898
21899 case ID_ITEMDROPSETS:
21900
21901 //item drop sets
21902
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21903 {
21904 box_out("found.");
21905 box_eol();
21906 catchup=false;
21907 }
21908
21909 63 box_out("Reading Item Drop Sets...");
21910
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readitemdropsets(f, tempheader.zelda_version, tempheader.build, keepall&&!get_bit(skip_flags, skip_itemdropsets));
21911
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21912 63 box_out("okay.");
21913 63 box_eol();
21914 63 break;
21915
21916 case ID_FAVORITES:
21917
21918 //favorite combos and combo aliases
21919
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(catchup)
21920 {
21921 box_out("found.");
21922 box_eol();
21923 catchup=false;
21924 }
21925
21926 63 box_out("Reading Favorite Combos...");
21927
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 ret=readfavorites(f, tempheader.zelda_version, tempheader.build, keepall&&!get_bit(skip_flags, skip_favorites));
21928
1/5
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
63 checkstatus(ret);
21929 63 box_out("okay.");
21930 63 box_eol();
21931 63 break;
21932
21933 default:
21934 if(!catchup)
21935 {
21936 box_out("Bad token! Searching...");
21937 box_eol();
21938 }
21939
21940 catchup=true;
21941 break;
21942 }
21943
21944
21945
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1512 times.
1512 if(catchup)
21946 {
21947 //section id
21948 section_id=(section_id<<8);
21949
21950 if(!p_getc(&tempbyte,f,true))
21951 {
21952 return qe_invalid;
21953 }
21954
21955 section_id+=tempbyte;
21956 }
21957
21958 else
21959 {
21960 //section id
21961
2/2
✓ Branch 0 taken 63 times.
✓ Branch 1 taken 1449 times.
1512 if(!pack_feof(f))
21962 {
21963
1/2
✓ Branch 0 taken 1449 times.
✗ Branch 1 not taken.
1449 if(!p_mgetl(&section_id,f,true))
21964 {
21965 return qe_invalid;
21966 }
21967 1449 }
21968 }
21969 }
21970 63 }
21971 else
21972 {
21973 //rules
21974 box_out("Reading Rules...");
21975 ret=readrules(f, &tempheader, keepall&&!get_bit(skip_flags, skip_rules));
21976 checkstatus(ret);
21977 box_out("okay.");
21978 box_eol();
21979
21980 //strings
21981 box_out("Reading Strings...");
21982 ret=readstrings(f, &tempheader, keepall&&!get_bit(skip_flags, skip_strings));
21983 checkstatus(ret);
21984 box_out("okay.");
21985 box_eol();
21986
21987 //door combo sets
21988 box_out("Reading Doors...");
21989 ret=readdoorcombosets(f, &tempheader, keepall&&!get_bit(skip_flags, skip_doors));
21990 checkstatus(ret);
21991 box_out("okay.");
21992 box_eol();
21993
21994 //dmaps
21995 box_out("Reading DMaps...");
21996 ret=readdmaps(f, &tempheader, tempheader.zelda_version, tempheader.build, 0, MAXDMAPS, keepall&&!get_bit(skip_flags, skip_dmaps));
21997 checkstatus(ret);
21998 box_out("okay.");
21999 box_eol();
22000
22001 // misc data
22002 box_out("Reading Misc. Data...");
22003 ret=readmisc(f, &tempheader, Misc, keepall&&!get_bit(skip_flags, skip_misc));
22004 checkstatus(ret);
22005 box_out("okay.");
22006 box_eol();
22007
22008 //items
22009 box_out("Reading Items...");
22010 ret=readitems(f, tempheader.zelda_version, tempheader.build, keepall&&!get_bit(skip_flags, skip_items));
22011 checkstatus(ret);
22012 box_out("okay.");
22013 box_eol();
22014
22015 //weapons
22016 box_out("Reading Weapons...");
22017 ret=readweapons(f, &tempheader, keepall&&!get_bit(skip_flags, skip_weapons));
22018 checkstatus(ret);
22019 box_out("okay.");
22020 box_eol();
22021
22022 //guys
22023 box_out("Reading Custom Guy Data...");
22024 ret=readguys(f, &tempheader, keepall&&!get_bit(skip_flags, skip_guys));
22025 checkstatus(ret);
22026 box_out("okay.");
22027 box_eol();
22028
22029 //maps
22030 box_out("Reading Maps...");
22031 ret=readmaps(f, &tempheader, keepall&&!get_bit(skip_flags, skip_maps));
22032 mapsread=true;
22033 checkstatus(ret);
22034 box_out("okay.");
22035 box_eol();
22036
22037 //combos
22038 box_out("Reading Combos...");
22039 ret=readcombos(f, &tempheader, tempheader.zelda_version, tempheader.build, 0, MAXCOMBOS, keepall&&!get_bit(skip_flags, skip_combos));
22040 combosread=true;
22041 checkstatus(ret);
22042 box_out("okay.");
22043 box_eol();
22044
22045 //color data
22046 box_out("Reading Color Data...");
22047 ret=readcolordata(f, Misc, tempheader.zelda_version, tempheader.build, 0, newerpdTOTAL, keepall&&!get_bit(skip_flags, skip_csets));
22048 checkstatus(ret);
22049 box_out("okay.");
22050 box_eol();
22051
22052 //tiles
22053 box_out("Reading Tiles...");
22054 ret=readtiles(f, newtilebuf, &tempheader, tempheader.zelda_version, tempheader.build, 0, NEWMAXTILES, false, keepall&&!get_bit(skip_flags, skip_tiles));
22055 checkstatus(ret);
22056 box_out("okay.");
22057 box_eol();
22058
22059 //midis
22060 box_out("Reading Tunes...");
22061 ret=readtunes(f, &tempheader, tunes, keepall&&!get_bit(skip_flags, skip_midis));
22062 checkstatus(ret);
22063 box_out("okay.");
22064 box_eol();
22065
22066 //cheat codes
22067 box_out("Reading Cheat Codes...");
22068 ret=readcheatcodes(f, &tempheader, keepall&&!get_bit(skip_flags, skip_cheats));
22069 checkstatus(ret);
22070 box_out("okay.");
22071 box_eol();
22072
22073 //initialization data
22074 box_out("Reading Init. Data...");
22075 ret=readinitdata(f, &tempheader, keepall&&!get_bit(skip_flags, skip_initdata));
22076 checkstatus(ret);
22077 box_out("okay.");
22078 box_eol();
22079
22080 if(keepall&&!get_bit(skip_flags, skip_subscreens))
22081 {
22082 setupsubscreens();
22083
22084 for(int32_t i=0; i<MAXDMAPS; ++i)
22085 {
22086 int32_t type=DMaps[i].type&dmfTYPE;
22087 DMaps[i].active_subscreen=(type == dmOVERW || type == dmBSOVERW)?0:1;
22088 DMaps[i].passive_subscreen=(get_bit(quest_rules,qr_ENABLEMAGIC))?0:1;
22089 }
22090 }
22091
22092 box_out("Setting Up Default Sound Effects...");
22093
22094 if(keepall&&!get_bit(skip_flags, skip_sfx))
22095 setupsfx();
22096
22097 box_out("okay.");
22098 box_eol();
22099
22100 //player sprites
22101 box_out("Reading Custom Player Sprite Data...");
22102 ret=readherosprites2(f, -1, 0, keepall&&!get_bit(skip_flags, skip_herosprites));
22103 checkstatus(ret);
22104 box_out("okay.");
22105 box_eol();
22106
22107 box_out("Setting Up Default Item Drop Sets...");
22108 ret=readitemdropsets(f, -1, 0, keepall&&!get_bit(skip_flags, skip_itemdropsets));
22109 box_out("okay.");
22110 box_eol();
22111 }
22112
22113 63 init_spritelists();
22114
22115 // check data
22116
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(f)
22117 {
22118 63 pack_fclose(f);
22119 63 }
22120
22121
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
63 if(!oldquest)
22122 {
22123
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if(exists(tmpfilename))
22124 {
22125 delete_file(tmpfilename);
22126 }
22127 63 }
22128
22129
1/6
✗ Branch 0 not taken.
✓ Branch 1 taken 63 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
63 if(fixffcs && combosread && mapsread)
22130 {
22131 for(int32_t i=0; i<map_count; i++)
22132 {
22133 for(int32_t j=0; j<MAPSCRS; j++)
22134 {
22135 for(int32_t m=0; m<32; m++)
22136 {
22137 if(combobuf[TheMaps[(i*MAPSCRS)+j].ffcs[m].getData()].type == cCHANGE)
22138 TheMaps[(i*MAPSCRS)+j].ffcs[m].flags|=ffCHANGER;
22139 }
22140 }
22141 }
22142 }
22143
22144
2/2
✓ Branch 0 taken 50 times.
✓ Branch 1 taken 13 times.
63 if(get_bit(quest_rules, qr_CONTFULL_DEP))
22145 {
22146 13 set_bit(quest_rules, qr_CONTFULL_DEP, 0);
22147 13 set_bit(zinit.misc, idM_CONTPERCENT, 1);
22148 13 zinit.cont_heart=100;
22149 13 zinit.start_heart=zinit.hc;
22150 13 }
22151
22152 63 box_out("Done.");
22153 63 box_eol();
22154 63 box_end(false);
22155
22156 // if (keepall==true||!get_bit(skip_flags, skip_header))
22157
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(keepall&&!get_bit(skip_flags, skip_header))
22158 {
22159 63 memcpy(Header, &tempheader, sizeof(tempheader));
22160 63 }
22161
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(keepall&&!get_bit(skip_flags, skip_zinfo))
22162 {
22163 63 ZI.copyFrom(tempzi);
22164 63 }
22165
22166
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(!keepall||get_bit(skip_flags, skip_maps))
22167 {
22168 map_count=old_map_count;
22169 }
22170
22171
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(!keepall||get_bit(skip_flags, skip_rules))
22172 {
22173 memcpy(quest_rules, old_quest_rules, QUESTRULES_NEW_SIZE);
22174 memcpy(extra_rules, old_extra_rules, EXTRARULES_SIZE);
22175 }
22176
22177
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 63 times.
63 if(!keepall||get_bit(skip_flags, skip_midis))
22178 {
22179 memcpy(midi_flags, old_midi_flags, MIDIFLAGS_SIZE);
22180 }
22181
22182
2/4
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 63 times.
✗ Branch 3 not taken.
63 if(deletefilename[0] && exists(deletefilename))
22183 {
22184 63 delete_file(deletefilename);
22185 63 }
22186
22187 //Debug FFCore.quest_format[]
22188 63 al_trace("Quest made in ZC Version: %x\n", FFCore.quest_format[vZelda]);
22189 63 al_trace("Quest made in ZC Build: %d\n", FFCore.quest_format[vBuild]);
22190 63 al_trace("Quest Section 'Header' is Version: %d\n", FFCore.quest_format[vHeader]);
22191 63 al_trace("Quest Section 'Rules' is Version: %d\n", FFCore.quest_format[vRules]);
22192 63 al_trace("Quest Section 'Strings' is Version: %d\n", FFCore.quest_format[vStrings]);
22193 63 al_trace("Quest Section 'Misc' is Version: %d\n", FFCore.quest_format[vMisc]);
22194 63 al_trace("Quest Section 'Tiles' is Version: %d\n", FFCore.quest_format[vTiles]);
22195 63 al_trace("Quest Section 'Combos' is Version: %d\n", FFCore.quest_format[vCombos]);
22196 63 al_trace("Quest Section 'CSets' is Version: %d\n", FFCore.quest_format[vCSets]);
22197 63 al_trace("Quest Section 'Maps' is Version: %d\n", FFCore.quest_format[vMaps]);
22198 63 al_trace("Quest Section 'DMaps' is Version: %d\n", FFCore.quest_format[vDMaps]);
22199 63 al_trace("Quest Section 'Doors' is Version: %d\n", FFCore.quest_format[vDoors]);
22200 63 al_trace("Quest Section 'Items' is Version: %d\n", FFCore.quest_format[vItems]);
22201 63 al_trace("Quest Section 'Weapons' is Version: %d\n", FFCore.quest_format[vWeaponSprites]);
22202 63 al_trace("Quest Section 'Colors' is Version: %d\n", FFCore.quest_format[vColours]);
22203 63 al_trace("Quest Section 'Icons' is Version: %d\n", FFCore.quest_format[vIcons]);
22204 //al_trace("Quest Section 'Gfx Pack' is Version: %d; qst.cpp doesn't read this!\n", FFCore.quest_format[vGfxPack]);
22205 63 al_trace("Quest Section 'InitData' is Version: %d\n", FFCore.quest_format[vInitData]);
22206 63 al_trace("Quest Section 'Guys' is Version: %d\n", FFCore.quest_format[vGuys]);
22207 63 al_trace("Quest Section 'MIDIs' is Version: %d\n", FFCore.quest_format[vMIDIs]);
22208 63 al_trace("Quest Section 'Cheats' is Version: %d\n", FFCore.quest_format[vCheats]);
22209 //al_trace("Quest Section 'Save Format' is Version: %d; qst.cpp doesn't read this!\n", FFCore.quest_format[vSaveformat]);
22210 63 al_trace("Quest Section 'Combo Aliases' is Version: %d\n", FFCore.quest_format[vComboAliases]);
22211 63 al_trace("Quest Section 'Player Sprites' is Version: %d\n", FFCore.quest_format[vHeroSprites]);
22212 63 al_trace("Quest Section 'Subscreen' is Version: %d\n", FFCore.quest_format[vSubscreen]);
22213 63 al_trace("Quest Section 'Dropsets' is Version: %d\n", FFCore.quest_format[vItemDropsets]);
22214 63 al_trace("Quest Section 'FFScript' is Version: %d\n", FFCore.quest_format[vFFScript]);
22215 63 al_trace("Quest Section 'SFX' is Version: %d\n", FFCore.quest_format[vSFX]);
22216 63 al_trace("Quest Section 'Favorites' is Version: %d\n", FFCore.quest_format[vFavourites]);
22217 63 al_trace("Quest Section 'CompatRules' is Version: %d\n", FFCore.quest_format[vCompatRule]);
22218 //Print metadata for versions under 2.10 here. Bleah.
22219
1/2
✓ Branch 0 taken 63 times.
✗ Branch 1 not taken.
63 if( FFCore.quest_format[vZelda] < 0x210 )
22220 {
22221 zprint2("\n[ZQUEST CREATOR METADATA]\n");
22222
22223 switch(FFCore.quest_format[vZelda])
22224 {
22225 case 0x193:
22226 {
22227 zprint2("Last saved in ZC Editor Version: 1.93, Beta %d\n", FFCore.quest_format[vBuild]); break;
22228 }
22229 case 0x192:
22230 {
22231 zprint2("Last saved in ZC Editor Version: 1.92, Beta %d\n", FFCore.quest_format[vBuild]); break;
22232 }
22233 case 0x190:
22234 {
22235 zprint2("Last saved in ZC Editor Version: 1.90");
22236 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22237 else zprint2("\n");
22238 break;
22239 }
22240 case 0x188:
22241 {
22242 zprint2("Last saved in ZC Editor Version: 1.88");
22243 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22244 else zprint2("\n");
22245 break;
22246 }
22247 case 0x187:
22248 {
22249 zprint2("Last saved in ZC Editor Version: 1.87");
22250 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22251 else zprint2("\n");
22252 break;
22253 }
22254 case 0x186:
22255 {
22256 zprint2("Last saved in ZC Editor Version: 1.86");
22257 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22258 else zprint2("\n");
22259 break;
22260 }
22261 case 0x185:
22262 {
22263 zprint2("Last saved in ZC Editor Version: 1.85");
22264 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22265 else zprint2("\n");
22266 break;
22267 }
22268 case 0x184:
22269 {
22270 zprint2("Last saved in ZC Editor Version: 1.84");
22271 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22272 else zprint2("\n");
22273 break;
22274 }
22275 case 0x183:
22276 {
22277 zprint2("Last saved in ZC Editor Version: 1.83");
22278 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22279 else zprint2("\n");
22280 break;
22281 }
22282 case 0x182:
22283 {
22284 zprint2("Last saved in ZC Editor Version: 1.82");
22285 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22286 else zprint2("\n");
22287 break;
22288 }
22289 case 0x181:
22290 {
22291 zprint2("Last saved in ZC Editor Version: 1.81");
22292 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22293 else zprint2("\n");
22294 break;
22295 }
22296 case 0x180:
22297 {
22298 zprint2("Last saved in ZC Editor Version: 1.80");
22299 if ( FFCore.quest_format[vBuild] ) zprint2(", Beta/Build %d\n", FFCore.quest_format[vBuild]);
22300 else zprint2("\n");
22301 break;
22302 }
22303 default:
22304 {
22305 zprint2("Last saved in ZC Editor Version: %x, Beta %d\n", FFCore.quest_format[vZelda],FFCore.quest_format[vBuild]); break;
22306 }
22307 }
22308 }
22309
22310 63 return qe_OK;
22311
22312 invalid:
22313 box_out("error.");
22314 box_eol();
22315 box_end(true);
22316
22317 if(f)
22318 {
22319 pack_fclose(f);
22320 }
22321
22322 if(!oldquest)
22323 {
22324 if(exists(tmpfilename))
22325 {
22326 delete_file(tmpfilename);
22327 }
22328
22329 if(deletefilename[0] && exists(deletefilename))
22330 {
22331 delete_file(deletefilename);
22332 }
22333 }
22334
22335 return qe_invalid;
22336
22337 63 }
22338
22339 63 int32_t loadquest(const char *filename, zquestheader *Header, miscQdata *Misc, zctune *tunes, bool show_progress, bool compressed, bool encrypted, bool keepall, byte *skip_flags, byte printmetadata, bool report, byte qst_num)
22340 {
22341 63 loading_qst_name = filename;
22342 63 loading_qst_num = qst_num;
22343 63 loadquest_report = report;
22344 63 int32_t ret = _lq_int(filename, Header, Misc, tunes, show_progress, compressed, encrypted, keepall, skip_flags,printmetadata);
22345 63 load_tmp_zi = NULL;
22346 63 loading_qst_name = NULL;
22347 63 loadquest_report = false;
22348 63 loading_qst_num = 0;
22349 63 return ret;
22350 }
22351 /*** end of qst.cc ***/
22352
22353